2016-12-13 12 views
0

でティーポットを配線に問題を抱えている:私は、コードの出力は次のようになりますOpenGLの

どのように私はティーポットはこのように見せることができ?:

私はgluPerspectiveglViewportコマンドを追加しようとしていますが、動作しません。

#include<windows.h> 
#include<stdio.h> 
#include<GL/gl.h> 
#include<GL/freeglut.h> 


void DrawScene(void); 

void DrawSceneAxes(void); 

void InitOpenGL(void); 

void ReshapeWindow(int width, int height); 

int mainWindow; 

int main(int argc, char **argv) 
{ 
glutInit(&argc, argv); 
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); 
glutInitWindowSize(800, 600); 
glutInitWindowPosition(150,150); 
mainWindow = glutCreateWindow("Transformacje czajnikowe"); 
if(mainWindow == 0){ 
    puts("Can't create window!\n"); 
    exit(-1); 
} 
glutSetWindow(mainWindow); 

glutDisplayFunc(DrawScene); 
glutReshapeFunc(ReshapeWindow); 

InitOpenGL(); 

glEnable(GL_DEPTH_TEST); 

glutMainLoop(); 

return(0); 
} 


void DrawScene(void) 
{ 

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

DrawSceneAxes(); 

glutSwapBuffers(); 

} 


void DrawSceneAxes(void) 
{ 
typedef float pt3d[3]; 


pt3d x_beg = { -10.0f, 0.0f, 0.0f }; 
pt3d x_end = { 10.0f, 0.0f, 0.0f }; 


pt3d y_beg = { 0.0f, -10.0f, 0.0f }; 
pt3d y_end = { 0.0f, 10.0f, 0.0f }; 


pt3d z_beg = { 0.0f, 0.0f, -10.0f }; 
pt3d z_end = { 0.0f, 0.0f, 10.0f }; 


glBegin(GL_LINES); 

    glColor3f(1.0f, 0.0f, 0.0f); 
    glVertex3fv(x_beg); 
    glVertex3fv(x_end); 


    glColor3f(0.0f, 1.0f, 0.0f); 
    glVertex3fv(y_beg); 
    glVertex3fv(y_end); 


    glColor3f(0.0f, 0.0f, 1.0f); 
    glVertex3fv(z_beg); 
    glVertex3fv(z_end); 
glEnd(); 

glutWireTeapot(4.0); 
} 


void InitOpenGL(void) 
{ 
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 
} 


void ReshapeWindow(int width, int height) 
{ 
//printf("w: %d\n", width); 
//printf("h: %d\n", height); 
GLdouble nRange = 15.0f; 
if(height == 0) 
{ 
    height = 1; 
} 

if(width == 0) 
{ 
    width = 1; 
} 

glViewport(0, 0, width, height); 

glMatrixMode(GL_PROJECTION); 

glLoadIdentity(); 

if(width <= height) 
    glOrtho(-nRange, nRange, -nRange*((GLdouble)height/width), nRange*((GLdouble)height/width), -1.0f, 1.0f); 
else 
    glOrtho(-nRange*((GLdouble)width/height), nRange*((GLdouble)width/height), -nRange, nRange, -1.0f, 1.0f); 

glMatrixMode(GL_MODELVIEW); 

glLoadIdentity(); 
} 
+2

を操作する方法をSOへようこそ!正確な問題を説明してください。 「それはうまくいかない」とは全く助けにならないと言っています。 – Mark

答えて

0

あなたはこれが(2D側面図のように見える - 深させずに)あなたの正投影を与えるラインglViewport(0, 0, width, height);

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

if (width <= height) 
    glOrtho(-nRange, nRange, -nRange*((GLdouble)height/width), nRange*((GLdouble)height/width), -100.0f, 100.0f); 
else 
    glOrtho(-nRange*((GLdouble)width/height), nRange*((GLdouble)width/height), -nRange, nRange, -100.0f, 100.0f); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

後、この起動を行うことができます。あなたが代わりにこのような何かを置くことができます100

に1から変更glOrthoの最後の2つのパラメータを注意:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustum(-1, 1, -1*((GLdouble)height/width), 1*((GLdouble)height/width), 1, nRange); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glTranslatef(0, 0, -10); 

これは、(3D側面図のように見えます)あなたの透視投影を与えるだろう。

サイドノート:あなたはGL_MODELVIEWとGL_PROJECTIONなどのOpenGLの行列にいくつかのチュートリアルを読んでください - 彼らはプレーどのような役割とそれらに

乾杯

関連する問題