2009-03-24 5 views
2
아래

은 NEHE Production (수업 25)에서 복사 한 코드의 전체 길이입니다. 그냥 놀려고했으나 각 포인트를 변경하거나 변환 할 수없는 것처럼 보입니다. 개별 구체 또는 실린더 ..
어떻게 든 내가 조정했을 때 그들은 가정하는 방식으로 배열되지 않고 회전하지 않습니다 ..
나중에이 튜토리얼에서 빛을 추가 할 계획입니다 ..포인트를 도형으로 변환하는 데 도움이 필요합니다.

사전에 어떤 도움

감사 =]

int InitGL(GLvoid) 
{ 
    glBlendFunc(GL_SRC_ALPHA,GL_ONE); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    glClearDepth(1.0); 
    glDepthFunc(GL_LESS); 
    glEnable(GL_DEPTH_TEST); 
    glShadeModel(GL_SMOOTH); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
    maxver=0; 
    objload("data/sphere.txt",&morph1); 
    objload("data/torus.txt",&morph2); 
    objload("data/Tube.txt",&morph3); 

    objallocate(&morph4,10300); 

    for(int i=0;i<10300;i++) 
    { 
     morph4.points[i].x=((float)(rand()%14000)/1000)-7; 
     morph4.points[i].y=((float)(rand()%14000)/1000)-7; 
     morph4.points[i].z=((float)(rand()%14000)/1000)-7; 
    } 

    objload("data/Tube.txt",&helper); 
    sour=dest=&morph1; 

    return TRUE; 
} 

void DrawGLScene(GLvoid) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 
    glTranslatef(cx,cy,cz); 
    glRotatef(xrot,1,0,0); 
    glRotatef(yrot,0,1,0); 
    glRotatef(zrot,0,0,1); 

    xrot+=xspeed; yrot+=yspeed; zrot+=zspeed; 

    GLfloat tx,ty,tz; 
    VERTEX q; 
    glPointSize(2.0f); 

    //glBegin(GL_POINTS); 
    for(int i=0;i<morph3.verts;i++) 
    { 
     if(morph) 
      q=calculate(i); 
     else 
      q.x=q.y=q.z=0; 

     helper.points[i].x-=q.x; 
     helper.points[i].y-=q.y; 
     helper.points[i].z-=q.z; 
     tx=helper.points[i].x; 
     ty=helper.points[i].y; 
     tz=helper.points[i].z; 

     glColor3f(0,1,1); 
     glPushMatrix(); //i have modified this part onwards 
     gltranslaste(tx,ty,tz); 
     glutSolidSphere(2,6,6); 
     glPopMatrix(); 

     /*glVertex3f(tx,ty,tz); 
     glColor3f(0,0.5f,1); 
     tx-=2*q.x; ty-=2*q.y; ty-=2*q.y; 
     glVertex3f(tx,ty,tz); 
     glColor3f(0,0,1); 
     tx-=2*q.x; ty-=2*q.y; ty-=2*q.y; 
     glVertex3f(tx,ty,tz);*/ 
    } 
    //glEnd(); 

    if(morph && step<=steps) 
     step++; 
    else 
    { 
     morph=FALSE; sour=dest; step=0; 
    } 
} 
+0

질문을 편집하고 모든 코드를 추가로 4 칸 들여 쓰기해야합니다 ... 그러면 모든 것이 한 블록에 올바르게 표시됩니다. – Beska

+0

regex가 금색 인 곳 ("; \ s \ s +") –

+0

Applaud @ LFSR은 커밋하고자했던 것보다 더 많은 작업을합니다! –

답변

0

마치 tutorial code처럼 보입니다. 아니면 요점은, 나는 구체 또는 실린더를 그려 시도하는 코드가 없다는 것을 알 수 있습니다. 너 무슨 짓을 한거야? 어떻게 잘못 됐어?

포인터를 찾으려면 포인트를 그리는 코드를 분리하여 시작하는 것이 좋습니다. 매개 변수에서 속성을 가진 점을 그리는 함수를 작성해보십시오.

(함수 내에서 glBegin() - glEnd() 쌍을 이동해야합니다. 모든 단일 점을 그리면 glBegin()이 먼저 호출되고 glEnd()가 먼저 호출됩니다 glSense() - glEnd() 쌍 사이에서 호출 할 수있는 GL 함수가 많지 않습니다.

편집 질문의 편집에 대한 응답 :

코드가 작동합니다. gltranslasteglTranslatef으로 대체하면 분명히 일반 점 대신 시안 색 모양을 그릴 수 있습니다. 허락하면, 모양은보기 흉하고 공처럼 아무것도 보이지 않지만 거기에 있고 심지어 "변덕"합니다. 뭐가 문제 야?

재질과 조명 옵션을 사용하면 더 잘 보일 수 있습니다. (또는 정렬을 볼 수 있도록 텍스처를 지정하십시오.) 회전의 경우 [MV] 행렬을 밀고 팝하는 사이에 glRotate()을 호출 할 수 있어야합니다.

+0

aib, 코드를 포함시켜주세요. 내가 잘못 된 부분을 알려주세요. gl, glu, glui, glut 및 glaux에서 매우 많은 유형의 분야가 있으므로 혼란 스럽습니다. – noob88

+0

@Ricket이 아래에서 제안했듯이 먼저 다각형을 사용하는 것이 더 낫다고 생각합니다. 하지만 glutSolidSphere()에서는 한 줄의 코드로 구체를 그리는 데 아무 문제가 없습니다. – aib

1

glBegin (GL_POINTS)를 glBegin (GL_TRIANGLES) 또는 GL_QUADS 또는 GL_POLYGONS으로 대체하는 것이 좋습니다.

glBegin/End here의 도움말 페이지를 참조하십시오.

관련 문제