Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 为什么这个四边形不渲染?或者如果是这样,为什么可以';我没看见吗? 我使用Visual C++和GLUT。我是不是错过了一些正常的东西?这正是我正在使用的代码。我尝试插入glNormal3f(0,0,1);但这并没有改变任何东西。SolidSphere的渲染与我预期的一样,但不是四边形 #include "stdafx.h" #include <stdlib.h> #include <GL/glut.h> float spin = 0.0f; float zDir = 0; GLfloat diffuseIntensity[] = {.75, .75, .75, 1}; GLfloat specularHue[] = {0, 0, .5f, 1}; GLfloat shininess[] = {5}; void moveCamera(); void checkKeys(int, int, int); void setUpLighting(); void changeSize(int w, int h) { if (h == 0) h = 1; float ratio = w * 1.0 / h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0, 0, w, h); gluPerspective(45,ratio,1,1000); glMatrixMode(GL_MODELVIEW); } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); moveCamera(); glTranslatef(0, 0, zDir-5); glEnable(GL_COLOR_MATERIAL); glShadeModel(GL_FLAT); glMaterialfv(GL_FRONT, GL_SHININESS, shininess); glMaterialfv(GL_FRONT, GL_SPECULAR, specularHue); glPushMatrix(); glRotatef(90, 1, 0, 0); glRotatef(spin, 0, 0, 1); glutSolidSphere(.5f, 24, 24); glPopMatrix(); spin += .01f; if(spin > 360) spin -= 360; glBegin(GL_QUADS); glVertex3f(-10, 0, -10); glVertex3f(-10, 0, 10); glVertex3f(10, 0, 10); glVertex3f(10, 0, -10); glEnd(); glutSwapBuffers(); glutPostRedisplay(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(800,600); glutCreateWindow("Lighthouse3D - GLUT Tutorial"); glutDisplayFunc(renderScene); glutReshapeFunc(changeSize); glutSpecialFunc(checkKeys); glEnable(GL_DEPTH_TEST); setUpLighting(); glutMainLoop(); return 1; } void moveCamera(){ glTranslatef(0, 0, zDir); } void checkKeys(int key, int x, int y){ switch(key){ case GLUT_KEY_UP: zDir += .1f; glutPostRedisplay(); break; case GLUT_KEY_DOWN: zDir += -.1f; glutPostRedisplay(); break; case GLUT_KEY_END: exit(0); } } void setUpLighting(){ GLfloat position0[] = {3, 1, 0, 1}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseIntensity); } #包括“stdafx.h” #包括 #包括 浮动自旋=0.0f; 浮点数zDir=0; GLfloat扩散强度[]={.75,75,75,1}; GLfloat specularHue[]={0,0,5f,1}; GLfloat光泽度[]={5}; void moveCamera(); 无效检查键(int,int,int); 无效设置照明(); 无效更改大小(整数w、整数h){ 如果(h==0) h=1; 浮动比率=w*1.0/h; glMatrixMode(GL_投影); glLoadIdentity(); glViewport(0,0,w,h); (45,比率11000); glMatrixMode(GLU模型视图); } void renderScene(void){ glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位); glLoadIdentity(); 移动摄像机(); glTranslatef(0,0,zDir-5); glEnable(GL_颜色_材料); glShadeModel(GLU平面); GLMATERIALV(GLU正面、GLU反光、反光); GLMATERIALV(GL_前部、GL_镜面反射、镜面反射); glPushMatrix(); glRotatef(90,1,0,0); glRotatef(自旋,0,0,1); 固体球(.5f,24,24); glPopMatrix(); 自旋+=.01f; 如果(旋转>360)旋转-=360; glBegin(GL_QUADS); glVertex3f(-10,0,-10); glVertex3f(-10,0,10); glVertex3f(10,0,10); glVertex3f(10,0,-10); 格伦德(); glutSwapBuffers(); 再发现(); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_深度| GLUT_双精度| GLUT_RGBA); 位置(100100); glutInitWindowSize(800600); glutCreateWindow(“Lighthouse 3D-GLUT教程”); glutDisplayFunc(渲染场景); GLUTEFUNC(更改大小); glutSpecialFunc(检查键); glEnable(GLU深度试验); 设置照明(); glutMainLoop(); 返回1; } void moveCamera(){ glTranslatef(0,0,zDir); } 无效检查键(整数键、整数x、整数y){ 开关(钥匙){ 案例过多关键点: zDir+=0.1f; 再发现(); 打破 案例过量键关闭: zDir+=-.1f; 再发现(); 打破 案例过量\u关键\u结束: 出口(0); } } void setUpLighting(){ GLfloat position0[]={3,1,0,1}; glEnable(德国劳埃德大学照明); glEnable(GL_LIGHT0); glLightfv(GLU灯0、GLU位置、位置0); glLightfv(GL_LIGHT0、GL_漫反射、漫反射强度); }_Opengl_Glut_Visual C++ 2010 - Fatal编程技术网 360)旋转-=360; glBegin(GL_QUADS); glVertex3f(-10,0,-10); glVertex3f(-10,0,10); glVertex3f(10,0,10); glVertex3f(10,0,-10); 格伦德(); glutSwapBuffers(); 再发现(); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_深度| GLUT_双精度| GLUT_RGBA); 位置(100100); glutInitWindowSize(800600); glutCreateWindow(“Lighthouse 3D-GLUT教程”); glutDisplayFunc(渲染场景); GLUTEFUNC(更改大小); glutSpecialFunc(检查键); glEnable(GLU深度试验); 设置照明(); glutMainLoop(); 返回1; } void moveCamera(){ glTranslatef(0,0,zDir); } 无效检查键(整数键、整数x、整数y){ 开关(钥匙){ 案例过多关键点: zDir+=0.1f; 再发现(); 打破 案例过量键关闭: zDir+=-.1f; 再发现(); 打破 案例过量\u关键\u结束: 出口(0); } } void setUpLighting(){ GLfloat position0[]={3,1,0,1}; glEnable(德国劳埃德大学照明); glEnable(GL_LIGHT0); glLightfv(GLU灯0、GLU位置、位置0); glLightfv(GL_LIGHT0、GL_漫反射、漫反射强度); },opengl,glut,visual-c++-2010,Opengl,Glut,Visual C++ 2010" /> 360)旋转-=360; glBegin(GL_QUADS); glVertex3f(-10,0,-10); glVertex3f(-10,0,10); glVertex3f(10,0,10); glVertex3f(10,0,-10); 格伦德(); glutSwapBuffers(); 再发现(); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_深度| GLUT_双精度| GLUT_RGBA); 位置(100100); glutInitWindowSize(800600); glutCreateWindow(“Lighthouse 3D-GLUT教程”); glutDisplayFunc(渲染场景); GLUTEFUNC(更改大小); glutSpecialFunc(检查键); glEnable(GLU深度试验); 设置照明(); glutMainLoop(); 返回1; } void moveCamera(){ glTranslatef(0,0,zDir); } 无效检查键(整数键、整数x、整数y){ 开关(钥匙){ 案例过多关键点: zDir+=0.1f; 再发现(); 打破 案例过量键关闭: zDir+=-.1f; 再发现(); 打破 案例过量\u关键\u结束: 出口(0); } } void setUpLighting(){ GLfloat position0[]={3,1,0,1}; glEnable(德国劳埃德大学照明); glEnable(GL_LIGHT0); glLightfv(GLU灯0、GLU位置、位置0); glLightfv(GL_LIGHT0、GL_漫反射、漫反射强度); },opengl,glut,visual-c++-2010,Opengl,Glut,Visual C++ 2010" />

Opengl 为什么这个四边形不渲染?或者如果是这样,为什么可以';我没看见吗? 我使用Visual C++和GLUT。我是不是错过了一些正常的东西?这正是我正在使用的代码。我尝试插入glNormal3f(0,0,1);但这并没有改变任何东西。SolidSphere的渲染与我预期的一样,但不是四边形 #include "stdafx.h" #include <stdlib.h> #include <GL/glut.h> float spin = 0.0f; float zDir = 0; GLfloat diffuseIntensity[] = {.75, .75, .75, 1}; GLfloat specularHue[] = {0, 0, .5f, 1}; GLfloat shininess[] = {5}; void moveCamera(); void checkKeys(int, int, int); void setUpLighting(); void changeSize(int w, int h) { if (h == 0) h = 1; float ratio = w * 1.0 / h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0, 0, w, h); gluPerspective(45,ratio,1,1000); glMatrixMode(GL_MODELVIEW); } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); moveCamera(); glTranslatef(0, 0, zDir-5); glEnable(GL_COLOR_MATERIAL); glShadeModel(GL_FLAT); glMaterialfv(GL_FRONT, GL_SHININESS, shininess); glMaterialfv(GL_FRONT, GL_SPECULAR, specularHue); glPushMatrix(); glRotatef(90, 1, 0, 0); glRotatef(spin, 0, 0, 1); glutSolidSphere(.5f, 24, 24); glPopMatrix(); spin += .01f; if(spin > 360) spin -= 360; glBegin(GL_QUADS); glVertex3f(-10, 0, -10); glVertex3f(-10, 0, 10); glVertex3f(10, 0, 10); glVertex3f(10, 0, -10); glEnd(); glutSwapBuffers(); glutPostRedisplay(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(800,600); glutCreateWindow("Lighthouse3D - GLUT Tutorial"); glutDisplayFunc(renderScene); glutReshapeFunc(changeSize); glutSpecialFunc(checkKeys); glEnable(GL_DEPTH_TEST); setUpLighting(); glutMainLoop(); return 1; } void moveCamera(){ glTranslatef(0, 0, zDir); } void checkKeys(int key, int x, int y){ switch(key){ case GLUT_KEY_UP: zDir += .1f; glutPostRedisplay(); break; case GLUT_KEY_DOWN: zDir += -.1f; glutPostRedisplay(); break; case GLUT_KEY_END: exit(0); } } void setUpLighting(){ GLfloat position0[] = {3, 1, 0, 1}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseIntensity); } #包括“stdafx.h” #包括 #包括 浮动自旋=0.0f; 浮点数zDir=0; GLfloat扩散强度[]={.75,75,75,1}; GLfloat specularHue[]={0,0,5f,1}; GLfloat光泽度[]={5}; void moveCamera(); 无效检查键(int,int,int); 无效设置照明(); 无效更改大小(整数w、整数h){ 如果(h==0) h=1; 浮动比率=w*1.0/h; glMatrixMode(GL_投影); glLoadIdentity(); glViewport(0,0,w,h); (45,比率11000); glMatrixMode(GLU模型视图); } void renderScene(void){ glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位); glLoadIdentity(); 移动摄像机(); glTranslatef(0,0,zDir-5); glEnable(GL_颜色_材料); glShadeModel(GLU平面); GLMATERIALV(GLU正面、GLU反光、反光); GLMATERIALV(GL_前部、GL_镜面反射、镜面反射); glPushMatrix(); glRotatef(90,1,0,0); glRotatef(自旋,0,0,1); 固体球(.5f,24,24); glPopMatrix(); 自旋+=.01f; 如果(旋转>360)旋转-=360; glBegin(GL_QUADS); glVertex3f(-10,0,-10); glVertex3f(-10,0,10); glVertex3f(10,0,10); glVertex3f(10,0,-10); 格伦德(); glutSwapBuffers(); 再发现(); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_深度| GLUT_双精度| GLUT_RGBA); 位置(100100); glutInitWindowSize(800600); glutCreateWindow(“Lighthouse 3D-GLUT教程”); glutDisplayFunc(渲染场景); GLUTEFUNC(更改大小); glutSpecialFunc(检查键); glEnable(GLU深度试验); 设置照明(); glutMainLoop(); 返回1; } void moveCamera(){ glTranslatef(0,0,zDir); } 无效检查键(整数键、整数x、整数y){ 开关(钥匙){ 案例过多关键点: zDir+=0.1f; 再发现(); 打破 案例过量键关闭: zDir+=-.1f; 再发现(); 打破 案例过量\u关键\u结束: 出口(0); } } void setUpLighting(){ GLfloat position0[]={3,1,0,1}; glEnable(德国劳埃德大学照明); glEnable(GL_LIGHT0); glLightfv(GLU灯0、GLU位置、位置0); glLightfv(GL_LIGHT0、GL_漫反射、漫反射强度); }

Opengl 为什么这个四边形不渲染?或者如果是这样,为什么可以';我没看见吗? 我使用Visual C++和GLUT。我是不是错过了一些正常的东西?这正是我正在使用的代码。我尝试插入glNormal3f(0,0,1);但这并没有改变任何东西。SolidSphere的渲染与我预期的一样,但不是四边形 #include "stdafx.h" #include <stdlib.h> #include <GL/glut.h> float spin = 0.0f; float zDir = 0; GLfloat diffuseIntensity[] = {.75, .75, .75, 1}; GLfloat specularHue[] = {0, 0, .5f, 1}; GLfloat shininess[] = {5}; void moveCamera(); void checkKeys(int, int, int); void setUpLighting(); void changeSize(int w, int h) { if (h == 0) h = 1; float ratio = w * 1.0 / h; glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0, 0, w, h); gluPerspective(45,ratio,1,1000); glMatrixMode(GL_MODELVIEW); } void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); moveCamera(); glTranslatef(0, 0, zDir-5); glEnable(GL_COLOR_MATERIAL); glShadeModel(GL_FLAT); glMaterialfv(GL_FRONT, GL_SHININESS, shininess); glMaterialfv(GL_FRONT, GL_SPECULAR, specularHue); glPushMatrix(); glRotatef(90, 1, 0, 0); glRotatef(spin, 0, 0, 1); glutSolidSphere(.5f, 24, 24); glPopMatrix(); spin += .01f; if(spin > 360) spin -= 360; glBegin(GL_QUADS); glVertex3f(-10, 0, -10); glVertex3f(-10, 0, 10); glVertex3f(10, 0, 10); glVertex3f(10, 0, -10); glEnd(); glutSwapBuffers(); glutPostRedisplay(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(800,600); glutCreateWindow("Lighthouse3D - GLUT Tutorial"); glutDisplayFunc(renderScene); glutReshapeFunc(changeSize); glutSpecialFunc(checkKeys); glEnable(GL_DEPTH_TEST); setUpLighting(); glutMainLoop(); return 1; } void moveCamera(){ glTranslatef(0, 0, zDir); } void checkKeys(int key, int x, int y){ switch(key){ case GLUT_KEY_UP: zDir += .1f; glutPostRedisplay(); break; case GLUT_KEY_DOWN: zDir += -.1f; glutPostRedisplay(); break; case GLUT_KEY_END: exit(0); } } void setUpLighting(){ GLfloat position0[] = {3, 1, 0, 1}; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, position0); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseIntensity); } #包括“stdafx.h” #包括 #包括 浮动自旋=0.0f; 浮点数zDir=0; GLfloat扩散强度[]={.75,75,75,1}; GLfloat specularHue[]={0,0,5f,1}; GLfloat光泽度[]={5}; void moveCamera(); 无效检查键(int,int,int); 无效设置照明(); 无效更改大小(整数w、整数h){ 如果(h==0) h=1; 浮动比率=w*1.0/h; glMatrixMode(GL_投影); glLoadIdentity(); glViewport(0,0,w,h); (45,比率11000); glMatrixMode(GLU模型视图); } void renderScene(void){ glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位); glLoadIdentity(); 移动摄像机(); glTranslatef(0,0,zDir-5); glEnable(GL_颜色_材料); glShadeModel(GLU平面); GLMATERIALV(GLU正面、GLU反光、反光); GLMATERIALV(GL_前部、GL_镜面反射、镜面反射); glPushMatrix(); glRotatef(90,1,0,0); glRotatef(自旋,0,0,1); 固体球(.5f,24,24); glPopMatrix(); 自旋+=.01f; 如果(旋转>360)旋转-=360; glBegin(GL_QUADS); glVertex3f(-10,0,-10); glVertex3f(-10,0,10); glVertex3f(10,0,10); glVertex3f(10,0,-10); 格伦德(); glutSwapBuffers(); 再发现(); } int main(int argc,字符**argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_深度| GLUT_双精度| GLUT_RGBA); 位置(100100); glutInitWindowSize(800600); glutCreateWindow(“Lighthouse 3D-GLUT教程”); glutDisplayFunc(渲染场景); GLUTEFUNC(更改大小); glutSpecialFunc(检查键); glEnable(GLU深度试验); 设置照明(); glutMainLoop(); 返回1; } void moveCamera(){ glTranslatef(0,0,zDir); } 无效检查键(整数键、整数x、整数y){ 开关(钥匙){ 案例过多关键点: zDir+=0.1f; 再发现(); 打破 案例过量键关闭: zDir+=-.1f; 再发现(); 打破 案例过量\u关键\u结束: 出口(0); } } void setUpLighting(){ GLfloat position0[]={3,1,0,1}; glEnable(德国劳埃德大学照明); glEnable(GL_LIGHT0); glLightfv(GLU灯0、GLU位置、位置0); glLightfv(GL_LIGHT0、GL_漫反射、漫反射强度); },opengl,glut,visual-c++-2010,Opengl,Glut,Visual C++ 2010,四边形被渲染,但您看不到它,因为它的绘制非常类似于桌子的表面,并且您的眼睛与桌子处于同一水平面。因此,效果就像什么都没有绘制一样。否则你会看到一条线 上面的旋转,被包裹在PushMatrix/PopMatrix中,只对实心球体起作用。四元体被渲染,但你看不到它,因为它的绘制非常像桌子的表面,你的眼睛与桌子处于同一水平面。因此,效果就像什么都没有画出来一样。否则你会看到一条线 上面的旋转被包裹在PushMatrix/PopMatrix中,仅对实心球体有效。请尝试一下: #include <G

四边形被渲染,但您看不到它,因为它的绘制非常类似于桌子的表面,并且您的眼睛与桌子处于同一水平面。因此,效果就像什么都没有绘制一样。否则你会看到一条线


上面的旋转,被包裹在PushMatrix/PopMatrix中,只对实心球体起作用。

四元体被渲染,但你看不到它,因为它的绘制非常像桌子的表面,你的眼睛与桌子处于同一水平面。因此,效果就像什么都没有画出来一样。否则你会看到一条线

上面的旋转被包裹在PushMatrix/PopMatrix中,仅对实心球体有效。

请尝试一下:

#include <GL/glut.h>

float zDir = 12;
void checkKeys(int key, int x, int y)
{
    switch(key)
    {
    case GLUT_KEY_UP:
        zDir += -.5f;
        glutPostRedisplay();
        break;

    case GLUT_KEY_DOWN:
        zDir += .5f;
        glutPostRedisplay();
        break;

    case GLUT_KEY_END:
        exit(0);
    }
}

float spin = 0;
void renderScene(void)
{
    glEnable(GL_DEPTH_TEST);

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    double w = glutGet( GLUT_WINDOW_WIDTH );
    double h = glutGet( GLUT_WINDOW_HEIGHT );
    gluPerspective(45,w/h,0.1,100);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glTranslatef(0, 0, -zDir);

    // set up light
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    GLfloat diffuseIntensity[] = {.75, .75, .75, 1};
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseIntensity);

    // draw sphere at light position
    glDisable( GL_LIGHTING );
    glPushMatrix();
    // spin light position around the y axis
    glRotatef( -spin, 0, 1, 0 );
    GLfloat position0[] = {3,3,3, 1};
    glLightfv(GL_LIGHT0, GL_POSITION, position0);
    glTranslatef( position0[0], position0[1], position0[2] );
    glColor3ub(255,255,255);
    glutSolidSphere(0.1,8,8);
    glPopMatrix();
    glEnable( GL_LIGHTING );

    // draw sphere
    glEnable(GL_COLOR_MATERIAL);
    glShadeModel(GL_FLAT);
    GLfloat specularHue[] = {0, 0, .5f, 1};
    GLfloat shininess[] = {5};
    glMaterialfv(GL_FRONT, GL_SHININESS, shininess);
    glMaterialfv(GL_FRONT, GL_SPECULAR, specularHue);

    spin += .01f;
    if(spin > 360) spin -= 360;

    glPushMatrix();
    glRotatef(spin, 0, 1, 0);
    glutSolidSphere(2, 24, 24);
    glPopMatrix();

    // draw quad
    glColor3ub(255,0,0);
    glPushMatrix();
    glScalef( 3, 3, 3 );
    glBegin(GL_QUADS);
    glNormal3f( 0, 0, 1 );
    glVertex2f( -1, -1 );
    glVertex2f(  1, -1 );
    glVertex2f(  1,  1 );
    glVertex2f( -1,  1 );
    glEnd();
    glPopMatrix();

    glutSwapBuffers();

    glutPostRedisplay();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(800,600);
    glutCreateWindow("Lighthouse3D - GLUT Tutorial");

    glutDisplayFunc(renderScene);
    glutSpecialFunc(checkKeys);
    glutMainLoop();
    return 1;
}
#包括
浮点数zDir=12;
无效检查键(整数键、整数x、整数y)
{
开关(钥匙)
{
案例过多关键点:
zDir+=-.5f;
再发现();
打破
案例过量键关闭:
zDir+=0.5f;
再发现();
打破
案例过量\u关键\u结束:
出口(0);
}
}
浮动自旋=0;
void renderScene(void)
{
glEnable(GLU深度试验);
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glMatrixMode(GL_投影);
glLoadIdentity();
双w=glutGet(GLUT\U窗口\U宽度);
双h=glutGet(GLUT\U窗口\U高度);
谷氨酰胺(45,w/h,0.1100);
glMatrixMode(GLU模型视图);
glLoadIdentity();
glTranslatef(0,0,-zDir);
//设灯
glEnable(德国劳埃德大学照明);
glEnable(GL_LIGHT0);
GLfloat扩散强度[]={.75,75,75,1};
glLightfv(GL_LIGHT0、GL_漫反射、漫反射强度);
//在灯光位置绘制球体
glDisable(GLU照明);
glPushMatrix();
//围绕y轴旋转灯光位置
glRotatef(-spin,0,1,0);
GLfloat position0[]={3,3,3,1};
glLightfv(GLU灯0、GLU位置、位置0);
GLTRANSTEF(位置0[0],位置0[1],位置0[2]);
glColor3ub(255255);
固体球(0.1,8,8);
glPopMatrix();
glEnable(德国劳埃德大学照明);
//画球
glEnable(GL_颜色_材料);
glShadeModel(GLU平面);
GLfloat specularHue[]={0,0,5f,1};
GLfloat光泽度[]={5};
GLMATERIALV(GLU正面、GLU反光、反光);
GLMATERIALV(GL_前部、GL_镜面反射、镜面反射);
自旋+=.01f;
如果(旋转>360)旋转-=360;
glPushMatrix();
glRotatef(自旋,0,1,0);
实心球(2,24,24);
glPopMatrix();
//画法
GL3UB(255,0,0);
glPushMatrix();
glScalef(3,3,3);
glBegin(GL_QUADS);
glNormal3f(0,0,1);
glVertex2f(-1,-1);
glVertex2f(1,-1);
glVertex2f(1,1);
glVertex2f(-1,1);
格伦德();
glPopMatrix();
glutSwapBuffers();
再发现();
}
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_深度| GLUT_双精度| GLUT_RGBA);
位置(100100);
glutInitWindowSize(800600);
glutCreateWindow(“Lighthouse 3D-GLUT教程”);
glutDisplayFunc(渲染场景);
glutSpecialFunc(检查键);
glutMainLoop();
返回1;
}
试一试:

#include <GL/glut.h>

float zDir = 12;
void checkKeys(int key, int x, int y)
{
    switch(key)
    {
    case GLUT_KEY_UP:
        zDir += -.5f;
        glutPostRedisplay();
        break;

    case GLUT_KEY_DOWN:
        zDir += .5f;
        glutPostRedisplay();
        break;

    case GLUT_KEY_END:
        exit(0);
    }
}

float spin = 0;
void renderScene(void)
{
    glEnable(GL_DEPTH_TEST);

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    double w = glutGet( GLUT_WINDOW_WIDTH );
    double h = glutGet( GLUT_WINDOW_HEIGHT );
    gluPerspective(45,w/h,0.1,100);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glTranslatef(0, 0, -zDir);

    // set up light
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    GLfloat diffuseIntensity[] = {.75, .75, .75, 1};
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseIntensity);

    // draw sphere at light position
    glDisable( GL_LIGHTING );
    glPushMatrix();
    // spin light position around the y axis
    glRotatef( -spin, 0, 1, 0 );
    GLfloat position0[] = {3,3,3, 1};
    glLightfv(GL_LIGHT0, GL_POSITION, position0);
    glTranslatef( position0[0], position0[1], position0[2] );
    glColor3ub(255,255,255);
    glutSolidSphere(0.1,8,8);
    glPopMatrix();
    glEnable( GL_LIGHTING );

    // draw sphere
    glEnable(GL_COLOR_MATERIAL);
    glShadeModel(GL_FLAT);
    GLfloat specularHue[] = {0, 0, .5f, 1};
    GLfloat shininess[] = {5};
    glMaterialfv(GL_FRONT, GL_SHININESS, shininess);
    glMaterialfv(GL_FRONT, GL_SPECULAR, specularHue);

    spin += .01f;
    if(spin > 360) spin -= 360;

    glPushMatrix();
    glRotatef(spin, 0, 1, 0);
    glutSolidSphere(2, 24, 24);
    glPopMatrix();

    // draw quad
    glColor3ub(255,0,0);
    glPushMatrix();
    glScalef( 3, 3, 3 );
    glBegin(GL_QUADS);
    glNormal3f( 0, 0, 1 );
    glVertex2f( -1, -1 );
    glVertex2f(  1, -1 );
    glVertex2f(  1,  1 );
    glVertex2f( -1,  1 );
    glEnd();
    glPopMatrix();

    glutSwapBuffers();

    glutPostRedisplay();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(800,600);
    glutCreateWindow("Lighthouse3D - GLUT Tutorial");

    glutDisplayFunc(renderScene);
    glutSpecialFunc(checkKeys);
    glutMainLoop();
    return 1;
}
#包括
浮点数zDir=12;
无效检查键(整数键、整数x、整数y)
{
开关(钥匙)
{
案例过多关键点:
zDir+=-.5f;
再发现();
打破
案例过剩