在C中创建线程(Threads creation in C)
void print_hello_world() { pid_t pid = getpid(); printf("Hello world %d\n", pid); pthread_exit(0); } void main() { pthread_t thread; pthread_create(&thread, NULL, (void *) &print_hello_world, NULL); print_hello_world(); }
我真的不明白pthread_create中的(void *)需要什么。 我们是否需要“&print_hello_world”或者可以放下“&”,因为我已经在某处传递函数指针,而我们不需要在函数名称前放置“&”。
void print_hello_world() { pid_t pid = getpid(); printf("Hello world %d\n", pid); pthread_exit(0); } void main() { pthread_t thread; pthread_create(&thread, NULL, (void *) &print_hello_world, NULL); print_hello_world(); }
I really couldn't understand what is the need of (void *) in pthread_create. And do we need "&print_hello_world" in the same or could drop "&" as I have read somewhere that while passing function pointers we don't need to place "&" before the function name.
原文:https://stackoverflow.com/questions/31810161
更新时间:2023-09-16 20:09
最满意答案
我找到了答案:
int viewport[4]; // get matrixs and viewport: glGetDoublev( GL_MODELVIEW_MATRIX, matModelView ); glGetDoublev( GL_PROJECTION_MATRIX, matProjection ); glGetIntegerv( GL_VIEWPORT, viewport ); gluUnProject( (viewport[2]-viewport[0])/2 , (viewport[3]-viewport[1])/2, 0.0, matModelView, matProjection, viewport, &camera_pos[0],&camera_pos[1],&camera_pos[2]);
这将为您提供场景中摄像机的坐标。
I found the answer for this :
int viewport[4]; // get matrixs and viewport: glGetDoublev( GL_MODELVIEW_MATRIX, matModelView ); glGetDoublev( GL_PROJECTION_MATRIX, matProjection ); glGetIntegerv( GL_VIEWPORT, viewport ); gluUnProject( (viewport[2]-viewport[0])/2 , (viewport[3]-viewport[1])/2, 0.0, matModelView, matProjection, viewport, &camera_pos[0],&camera_pos[1],&camera_pos[2]);
this will give you the coordinates of the camera in the scene.
相关问答
更多-
mDirectVideo = new DirectVideo(texture); texture = createTexture(); 应该 texture = createTexture(); mDirectVideo = new DirectVideo(texture); 着色器 private final String vertexShaderCode = "attribute vec4 position;" + "attribute vec2 inputTextu ...
-
你好像错了一个副词: Front.x = cos(convertToRads(yaw) * cos(convertToRads(pitch))); 代替: Front.x = cos(convertToRads(yaw)) * cos(convertToRads(pitch)); It seems you have misplaced a paranthesis: Front.x = cos(convertToRads(yaw) * cos(convertToRads(pitch))); instea ...
-
我认为这是一个惯例问题。 例如,当你的鼻子向上时,俯仰角是正的还是在你俯冲时是正的? 这两种方法都可以正常工作,您可能只需要根据您选择的惯例来否定角度。 在现实世界中,我一直在争论“倾角”和“方位角”对地质学家的意义,似乎在地质学界没有固定的惯例。 看来您的Lloyd Goodall参考不会否定glTranslatef()调用中的摄像头位置。 又一个惯例? 要回答为什么他们选择代码风格的问题......我认为它有点随意,所以作者只会以某种方式做到这一点。 I would suggest that it's ...
-
你有一些简单的选择: 通过调用XMMatrixInverse或D3DXMatrixInverse来反转视图矩阵,以便获得“CameraWorld”矩阵。 然后它的(_41,_42,_43)元素将是位置向量。 反转视图矩阵(例如上次)但不是读出roe,而是使用XMMatrixDecompose或D3DXMatrixDecompose来获取摄像机位置和方向。 一个好主意是在程序存储器中同时具有View和InvView矩阵,以便快速访问这些信息:矩阵求逆在计算上非常昂贵。 视图矩阵只是摄像机世界矩阵的逆变换(只是 ...
-
openGL相机问题(openGL camera issue)[2023-07-13]
在使用gluLookAt之前,需要加载单位矩阵(或在SetMatrices设置的其他一些规范矩阵), gluLookAt将新矩阵与现有的模型视图矩阵相乘。 或者你可以使用push和pop矩阵的工作方式: 设置你的矩阵 推模型视图矩阵 看看随机位置 渲染场景到纹理 弹出模型视图矩阵 看原始位置(可能没有必要) 渲染你的四边形 You need to load the identity matrix, (or some other canonical matrix which you set up in Set ... -
OpenGL:相机和物体(OpenGL: Camera and objects)[2022-12-07]
让我向您介绍一种称为“矩阵”的东西: float matrix[16]; 矩阵是一个简单的数组,用于以一个整齐的包中存储所有四个向量,采用OpenGL理解的格式。 您可以按以下方式将矢量存储在矩阵中: matrix[0] = getAxisX().getX(); matrix[1] = getAxisX().getY(); matrix[2] = getAxisX().getZ(); matrix[3] = 0.0; matrix[4] = getAxisY().getX(); matrix[5] = ... -
您应该将uniform vec3 camera_location传递给着色器 You should pass a uniform vec3 camera_location to the shader
-
为了简单起见,我假设矩阵只包含旋转,平移和均匀缩放的组合。 一般变换矩阵可以表示其他类型的翻译,如: 非均匀缩放。 剪切变换。 旋转和缩放位于矩阵的左上角3x3部分,即每个方向上索引为0至3的元素。 如果没有缩放,则此3x3矩阵的每个行向量的长度为1.0。 如果存在缩放,则可以通过计算任何这些行向量的长度来计算缩放因子: scalingFactor = sqrt(m00 * m00 + m01 * m01 + m02 * m02); 然后通过将3×3子矩阵的所有元素除以缩放因子来获得旋转矩阵: ...
-
相机的模型转换将是 M = T * R 由于View转换是反向的,所以这是 V = R^-1 * T^-1 这意味着整体旋转包含旋转的平移向量。 你必须从点积计算它: translation.x = -dot(position, right vector) translation.y = -dot(position, up vector) translation.z = -dot(position, direction vector) 您可以从矩阵中检索这些向量。 它们位于前三列/行中。 The mo ...
-
我找到了答案: int viewport[4]; // get matrixs and viewport: glGetDoublev( GL_MODELVIEW_MATRIX, matModelView ); glGetDoublev( GL_PROJECTION_MATRIX, matProjection ); glGetIntegerv( GL_VIEWPORT, viewport ); gluUnProject( (viewport[2]-viewport[0])/2 , (viewport[ ...