我在创建一个矩形表面时遇到了麻烦,该表面上有一个锥形聚光灯.到目前为止,我已经尝试创建一个2D立方体表面(glutSolidCube())并用于GL_SPOT_XXX创建聚光灯.但是我不是出于什么原因,光线只是在整个表面散射而不是聚集成一个点.
所以这是我的代码到目前为止,你可以专注于init_light()和display()函数.如果你需要:)其他功能供你参考
void rotateCamera()
{
/* Rotate camera 2 degrees about selected axis */
theta[axis] += dtheta;
if (theta[axis] > 360.0 ) theta[axis] -= 360.0;
glutPostRedisplay();
}
void computeCameraPosition() {
GLdouble M[16];
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glTranslatef(centroid[0], centroid[1], centroid[2]);
glRotatef(theta[0], 1.0, 0.0, 0.0);
glRotatef(theta[1], 0.0, 1.0, 0.0);
glRotatef(theta[2], 0.0, 0.0, 1.0);
glTranslatef(-centroid[0], -centroid[1], -centroid[2]);
glGetDoublev(GL_MODELVIEW_MATRIX, M);
GLdouble newvec[16];
glMultMatrixd(init_vec);
glGetDoublev(GL_MODELVIEW_MATRIX, newvec);
glPopMatrix();
/* the 1st and 2nd columns are the eye position and …Run Code Online (Sandbox Code Playgroud) 检查结构的成员是否为null时遇到问题.例如:
typedef struct {
int value;
} A;
int main() {
A *foo = malloc(sizeof(A));
foo->value++; // obviously, null pointer error
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试通过以下方式检查值是否为NULL:
if (foo->value != NULL) {
foo->value++;
}
Run Code Online (Sandbox Code Playgroud)
但是发生了错误:指针和整数之间的比较.
我该怎么办?请注意,0在我的情况下,将其设置为不是一个选项.
我有一个指向struct的指针数组,在处理完数组后,指针位于内存块的末尾.我想释放内存块,所以我需要转到第一个内存字节并再次循环遍历指针数组以释放数组中的每个元素.你会如何指回内存块的第一个字节?