実行時にキューブの3辺が表示されるプロジェクトをOpenGL C++で作成しようとしています。 3面を見るために必要な回転はありません。私はOpenGLについて非常に新しいです、私の攻撃計画は今x、y、zの値を変更しています。私は2dで作業しても問題ありませんが、ミックスするためにzを追加することは、私を驚かせるものです。私は、負の値を使用するとカメラに近づくと正の距離に近い画像が表示されますが、下のコードではZ値を変更するとオブジェクトに何もしません。実行時に3辺を表示する3Dキューブを作成し、3辺をすべて表示するように回転しない
キューブ全体が描画される前に、ウィンドウの正しい位置にある2つのものを最初に取得しようとするだけで、前面と右側が表示されます(実行中)。もともと私はそれらを0.5または-0.5の点で描きましたが、それは画面上に矩形を生成するだけです。
私の主な質問は、各頂点の動作を予測する簡単な方法があるかどうかです。はい、私はグラフィカルな空間で作業していることは知っていますが、値が変更されたときに私のポイントが動かないのはなぜですか?
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include <stdlib.h> //For exit function
void exit(int); //To Exit Program
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 1.0, 1.0);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}
void cube()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0, 0.0, 0.0); glVertex3f( 0.2, -0.3, -0.5); // P1 is red lb
glColor3f(0.0, 1.0, 0.0); glVertex3f( 0.3, 0.2, -0.5); // P2 is green lt
glColor3f(0.0, 0.0, 1.0); glVertex3f(-0.2, 0.3, -0.5); // P3 is blue tt
glColor3f(1.0, 0.0, 1.0); glVertex3f(-0.3, -0.2, -0.5); // P4 is purple tb
glEnd();
// Green side - LEFT
glBegin(GL_QUADS);
glColor3f(0.0, 1.0, 0.0);
glVertex3f(-0.2, -0.3, 0.5);
glVertex3f(-0.3, 0.2, 0.5);
glVertex3f(-0.2, 0.3, -0.5);
glVertex3f(-0.3, -0.2, -0.5);
glEnd();
glFlush();
}
void myKeyboard(unsigned char theKey, int mouseX, int mouseY)
{
switch(theKey)
{
case 'Q':
case 'q':
exit(-1); //terminate the program
default:
break; // do nothing
}
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(640,480);
glutInitWindowPosition(100,150);
glutCreateWindow("Shapes: Q or q to quit");
glutDisplayFunc(cube);
glutKeyboardFunc(myKeyboard);
init();
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
それはそれを置くのに最適です。それは挑戦的に私がそれをもっと理解するのを助けます。残念ながら、今はこれが学校の課題であり、私の教授はglOrthoを割り当てに使用させています。研究を見つけるために、私はほとんどの人がキューブを作成するために配列を使っているのを見つけました。私はそれほど助けを求めるのは難しいですね。古くなったバージョンを誰も使用していないので、 – csm60
はい、即時モードは頂点配列に置き換えられました。ほとんどのコンピュータグラフィックスクラスはまだこのように教えるだろう。 –
これはglOrthoを介してのみ完了することができる課題であれば、あなたが紛失している可能性があります。デフォルトでは、頂点の背面が間引かれます。背面は、時計回りまたは反時計回りのいずれかで頂点が指定された順序によって決まります。カリングを無効にするか、正面を他の方向に切り替えるか、すべてのクワッドが正しい順序で指定されていることを確認することができます。いくつかの詳細:https://www.khronos.org/opengl/wiki/Face_Culling –