สอบถามพี่ๆโปรแกรมเมอร์นะครับคือ อ.สั่งงานผมมาให้ทำรูป 3 มิติ โดยอิงโค๊ตในหนังสือที่เรียน แต่ผมลองทำแล้วแก้ไขแล้วทำไม่ได้อ่ะครับ ผมเลยขอพึ่งพี่ๆ โปรแกรมเมอร์หน่อยอ่ะครับ
ตัวอย่างโค๊ต ในหนังสือ
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#define ESCAPE 27
GLfloat xt = 0.0, yt=0.0, zt=0.0;
GLfloat xs=1.0, ys=1.0,zs=1.0;
GLfloat xangle=20.0,yangle=20.0,zangle=20.0;
GLint window;
void init(void)
{
glEnable(GL_DEPTH_TEST);
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-6,6,-6,6,-6,6);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Anti-Alias
glEnable (GL_LINE_SMOOTH);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor3f(1.0,0.0,0.0);
glBegin (GL_LINE);
glVertex3f(-5.5,0.0,0.0);
glVertex3f(5.5,0.0,0.0);
glEnd();
glBegin (GL_LINE);
glVertex3f(0.0,-5.5,0.0);
glVertex3f(0.0,5.5,0.0);
glEnd();
glPushMatrix();
glTranslatef(xt, yt, 0.0);
glScalef(xs, ys, 1.0);
glRotatef(xangle, 1.0, 0.0, 0.0);
glRotatef(yangle, 0.0, 1.0, 0.0);
glRotatef(zangle, 0.0, 0.0, 1.0);
glColor3f(0.0,0.0,1.0);
glutWireCube (2);
//glutWireTeapot (2);
glPopMatrix();
glutSwapBuffers();
glFlush();
}
void KeyboardAssign (GLubyte key, GLint x, GLint y)
{
switch (key)
{
case ESCAPE :
printf("escape pressed. exit. \n");
glutDestroyWindow(window);
exit(0);
break;
case 't':
xt += 0.2;
glutPostRedisplay();
break;
case 'T':
xt += 0.2;
glutPostRedisplay();
break;
case 'S':
xt += 0.2;
glutPostRedisplay();
break;
case 'X':
xt += 10.0;
glutPostRedisplay();
break;
case 'y':
xt += 10.0;
glutPostRedisplay();
break;
case 'z':
xt += 10.0;
glutPostRedisplay();
break;
default:
break;
}
}
int main(int argc,char** argv)
{
glutInit (&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50,150);
glutInitWindowSize(500,500);
glutCreateWindow("t=tran x, T=tran y, s=scale x,S=scale y,X=rot x,y=rot y,z=rot z");
init();
glutDisplayFunc(myDisplay);
glutIdleFunc(myDisplay);
glutKeyboardFunc(KeyboardAssign);
glutMainLoop();
return 0;
}
และภาพที่ผมจะทำ
รบกวนพี่ๆที่ใจดีหน่อยนะครับ สอนก็ได้หรือจะเขียนให้ฏ้ได้ครับขอบพระคุณมากๆเลยนะครับ
เขียนโค๊ต 3D OpenGl
ตัวอย่างโค๊ต ในหนังสือ
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#define ESCAPE 27
GLfloat xt = 0.0, yt=0.0, zt=0.0;
GLfloat xs=1.0, ys=1.0,zs=1.0;
GLfloat xangle=20.0,yangle=20.0,zangle=20.0;
GLint window;
void init(void)
{
glEnable(GL_DEPTH_TEST);
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-6,6,-6,6,-6,6);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Anti-Alias
glEnable (GL_LINE_SMOOTH);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor3f(1.0,0.0,0.0);
glBegin (GL_LINE);
glVertex3f(-5.5,0.0,0.0);
glVertex3f(5.5,0.0,0.0);
glEnd();
glBegin (GL_LINE);
glVertex3f(0.0,-5.5,0.0);
glVertex3f(0.0,5.5,0.0);
glEnd();
glPushMatrix();
glTranslatef(xt, yt, 0.0);
glScalef(xs, ys, 1.0);
glRotatef(xangle, 1.0, 0.0, 0.0);
glRotatef(yangle, 0.0, 1.0, 0.0);
glRotatef(zangle, 0.0, 0.0, 1.0);
glColor3f(0.0,0.0,1.0);
glutWireCube (2);
//glutWireTeapot (2);
glPopMatrix();
glutSwapBuffers();
glFlush();
}
void KeyboardAssign (GLubyte key, GLint x, GLint y)
{
switch (key)
{
case ESCAPE :
printf("escape pressed. exit. \n");
glutDestroyWindow(window);
exit(0);
break;
case 't':
xt += 0.2;
glutPostRedisplay();
break;
case 'T':
xt += 0.2;
glutPostRedisplay();
break;
case 'S':
xt += 0.2;
glutPostRedisplay();
break;
case 'X':
xt += 10.0;
glutPostRedisplay();
break;
case 'y':
xt += 10.0;
glutPostRedisplay();
break;
case 'z':
xt += 10.0;
glutPostRedisplay();
break;
default:
break;
}
}
int main(int argc,char** argv)
{
glutInit (&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(50,150);
glutInitWindowSize(500,500);
glutCreateWindow("t=tran x, T=tran y, s=scale x,S=scale y,X=rot x,y=rot y,z=rot z");
init();
glutDisplayFunc(myDisplay);
glutIdleFunc(myDisplay);
glutKeyboardFunc(KeyboardAssign);
glutMainLoop();
return 0;
}
และภาพที่ผมจะทำ
รบกวนพี่ๆที่ใจดีหน่อยนะครับ สอนก็ได้หรือจะเขียนให้ฏ้ได้ครับขอบพระคุณมากๆเลยนะครับ