gluCylinder()如何使用OpenGL
我想用OpenGL建立一个板球场。我制作了几个多边形来表示场地、球场和保龄球线。但问题是,当我尝试使用gluCylinder()如何使用OpenGL,c,opengl,glu,C,Opengl,Glu,我想用OpenGL建立一个板球场。我制作了几个多边形来表示场地、球场和保龄球线。但问题是,当我尝试使用glucronal制作树桩时,我制作了深度glEnable(GL\u depth\u TEST),但我的多边形无法工作。我只是想知道如何使用我制作的多边形制作树桩 我有以下代码,但想在这里添加树桩,但我不能 #include <GL/gl.h> #include <GL/glut.h> static double deg=0.0; void display(void) {
glucronal
制作树桩时,我制作了深度glEnable(GL\u depth\u TEST)
,但我的多边形无法工作。我只是想知道如何使用我制作的多边形制作树桩
我有以下代码,但想在这里添加树桩,但我不能
#include <GL/gl.h>
#include <GL/glut.h>
static double deg=0.0;
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glRotatef(deg, 0.0, 0.0, 1.0); // Rotate by deg
// field
glColor3f (0.0, 0.5, 0.0);
glBegin(GL_POLYGON);
glVertex3f (0, 0, 0.0);
glVertex3f (1, 0, 0.0);
glVertex3f (1, 0.75, 0.0);
glVertex3f (0.8, 0.82, 0.0);
glVertex3f (0.6, 0.85, 0.0);
glVertex3f (0.4, 0.85, 0.0);
glVertex3f (0.2, 0.82, 0.0);
glVertex3f (0.0, 0.75, 0.0);
glEnd();
// pitch
glColor3f (0.25, 0.30, 0.0);
glBegin(GL_POLYGON);
glVertex3f(0.5,0.65,0.0);
glVertex3f(0.47,0.35,0.0);
glVertex3f(0.60,0.35,0.0);
glVertex3f(0.57,0.65,0.0);
glEnd();
//ump line
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f(0.49,0.63,0.0);
glVertex3f(0.49,0.6315,0.0);
glVertex3f(0.58,0.6315,0.0);
glVertex3f(0.58,0.63,0.0);
glEnd();
//bat line
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f(0.46,0.40,0.0);
glVertex3f(0.46,0.4025,0.0);
glVertex3f(0.61,0.4025,0.0);
glVertex3f(0.61,0.40,0.0);
glEnd();
glFlush ();
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27: // "esc" on keyboard
exit(0);
break;
case 97: // "a" on keyboard
deg = deg+5.0;
glutPostRedisplay();
break;
case 100:
deg = deg-5.0;
glutPostRedisplay();
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (600, 600);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
#包括
#包括
静态双度=0.0;
作废显示(作废)
{
glClear(GLU颜色缓冲位);
glRotatef(度,0.0,0.0,1.0);//按度旋转
//场
GL3F(0.0,0.5,0.0);
glBegin(GL_多边形);
glVertex3f(0,0,0.0);
glVertex3f(1,0,0.0);
glVertex3f(1,0.75,0.0);
glVertex3f(0.8,0.82,0.0);
glVertex3f(0.6,0.85,0.0);
glVertex3f(0.4,0.85,0.0);
glVertex3f(0.2,0.82,0.0);
glVertex3f(0.0,0.75,0.0);
格伦德();
//投球
GL3F(0.25,0.30,0.0);
glBegin(GL_多边形);
glVertex3f(0.5,0.65,0.0);
glVertex3f(0.47,0.35,0.0);
glVertex3f(0.60,0.35,0.0);
glVertex3f(0.57,0.65,0.0);
格伦德();
//ump线
GL3F(1.0,1.0,1.0);
glBegin(GL_多边形);
glVertex3f(0.49,0.63,0.0);
glVertex3f(0.49,0.6315,0.0);
glVertex3f(0.58,0.6315,0.0);
glVertex3f(0.58,0.63,0.0);
格伦德();
//蝙蝠线
GL3F(1.0,1.0,1.0);
glBegin(GL_多边形);
glVertex3f(0.46,0.40,0.0);
glVertex3f(0.46,0.4025,0.0);
glVertex3f(0.61,0.4025,0.0);
glVertex3f(0.61,0.40,0.0);
格伦德();
glFlush();
}
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(0.0,1.0,0.0,1.0,-1.0,1.0);
}
无效键盘(无符号字符键,整数x,整数y)
{
开关(钥匙){
案例27:键盘上的//“esc”
出口(0);
打破
案例97:键盘上的//“a”
度=度+5.0;
再发现();
打破
案例100:
度=度-5.0;
再发现();
打破
}
}
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(600600);
位置(100100);
“你好”;
init();
glutDisplayFunc(显示器);
键盘Func(键盘);
glutMainLoop();
返回0;
}
glEnable(GLU深度测试)
需要深度缓冲区。确保通过glutInitDisplayMode()
调用中的GLUT\u DEPTH
中的或ing分配一个
#include <GL/glut.h>
static double deg=0.0;
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(deg, 0.0, 0.0, 1.0); // Rotate by deg
// field
glColor3f (0.0, 0.5, 0.0);
glBegin(GL_POLYGON);
glVertex3f (0, 0, 0.0);
glVertex3f (1, 0, 0.0);
glVertex3f (1, 0.75, 0.0);
glVertex3f (0.8, 0.82, 0.0);
glVertex3f (0.6, 0.85, 0.0);
glVertex3f (0.4, 0.85, 0.0);
glVertex3f (0.2, 0.82, 0.0);
glVertex3f (0.0, 0.75, 0.0);
glEnd();
// pitch
glColor3f (0.25, 0.30, 0.0);
glBegin(GL_POLYGON);
glVertex3f(0.5,0.65,0.0);
glVertex3f(0.47,0.35,0.0);
glVertex3f(0.60,0.35,0.0);
glVertex3f(0.57,0.65,0.0);
glEnd();
//ump line
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f(0.49,0.63,0.0);
glVertex3f(0.49,0.6315,0.0);
glVertex3f(0.58,0.6315,0.0);
glVertex3f(0.58,0.63,0.0);
glEnd();
//bat line
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f(0.46,0.40,0.0);
glVertex3f(0.46,0.4025,0.0);
glVertex3f(0.61,0.4025,0.0);
glVertex3f(0.61,0.40,0.0);
glEnd();
glPopMatrix();
glFlush ();
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27: // "esc" on keyboard
exit(0);
break;
case 'a': // "a" on keyboard
deg = deg+5.0;
glutPostRedisplay();
break;
case 'z':
deg = deg-5.0;
glutPostRedisplay();
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (600, 600);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
确保在glClear()
调用中通过GL\u depth\u buffer\u位中的或ing清除新的深度缓冲区
#include <GL/glut.h>
static double deg=0.0;
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(deg, 0.0, 0.0, 1.0); // Rotate by deg
// field
glColor3f (0.0, 0.5, 0.0);
glBegin(GL_POLYGON);
glVertex3f (0, 0, 0.0);
glVertex3f (1, 0, 0.0);
glVertex3f (1, 0.75, 0.0);
glVertex3f (0.8, 0.82, 0.0);
glVertex3f (0.6, 0.85, 0.0);
glVertex3f (0.4, 0.85, 0.0);
glVertex3f (0.2, 0.82, 0.0);
glVertex3f (0.0, 0.75, 0.0);
glEnd();
// pitch
glColor3f (0.25, 0.30, 0.0);
glBegin(GL_POLYGON);
glVertex3f(0.5,0.65,0.0);
glVertex3f(0.47,0.35,0.0);
glVertex3f(0.60,0.35,0.0);
glVertex3f(0.57,0.65,0.0);
glEnd();
//ump line
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f(0.49,0.63,0.0);
glVertex3f(0.49,0.6315,0.0);
glVertex3f(0.58,0.6315,0.0);
glVertex3f(0.58,0.63,0.0);
glEnd();
//bat line
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f(0.46,0.40,0.0);
glVertex3f(0.46,0.4025,0.0);
glVertex3f(0.61,0.4025,0.0);
glVertex3f(0.61,0.40,0.0);
glEnd();
glPopMatrix();
glFlush ();
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27: // "esc" on keyboard
exit(0);
break;
case 'a': // "a" on keyboard
deg = deg+5.0;
glutPostRedisplay();
break;
case 'z':
deg = deg-5.0;
glutPostRedisplay();
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (600, 600);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
#包括
静态双度=0.0;
作废显示(作废)
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glPushMatrix();
glRotatef(度,0.0,0.0,1.0);//按度旋转
//场
GL3F(0.0,0.5,0.0);
glBegin(GL_多边形);
glVertex3f(0,0,0.0);
glVertex3f(1,0,0.0);
glVertex3f(1,0.75,0.0);
glVertex3f(0.8,0.82,0.0);
glVertex3f(0.6,0.85,0.0);
glVertex3f(0.4,0.85,0.0);
glVertex3f(0.2,0.82,0.0);
glVertex3f(0.0,0.75,0.0);
格伦德();
//投球
GL3F(0.25,0.30,0.0);
glBegin(GL_多边形);
glVertex3f(0.5,0.65,0.0);
glVertex3f(0.47,0.35,0.0);
glVertex3f(0.60,0.35,0.0);
glVertex3f(0.57,0.65,0.0);
格伦德();
//ump线
GL3F(1.0,1.0,1.0);
glBegin(GL_多边形);
glVertex3f(0.49,0.63,0.0);
glVertex3f(0.49,0.6315,0.0);
glVertex3f(0.58,0.6315,0.0);
glVertex3f(0.58,0.63,0.0);
格伦德();
//蝙蝠线
GL3F(1.0,1.0,1.0);
glBegin(GL_多边形);
glVertex3f(0.46,0.40,0.0);
glVertex3f(0.46,0.4025,0.0);
glVertex3f(0.61,0.4025,0.0);
glVertex3f(0.61,0.40,0.0);
格伦德();
glPopMatrix();
glFlush();
}
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(0.0,1.0,0.0,1.0,-1.0,1.0);
glMatrixMode(GLU模型视图);
glLoadIdentity();
}
无效键盘(无符号字符键,整数x,整数y)
{
开关(钥匙){
案例27:键盘上的//“esc”
出口(0);
打破
键盘上的大小写“a”://“a”
度=度+5.0;
再发现();
打破
案例“z”:
度=度-5.0;
再发现();
打破
}
}
int main(int argc,字符**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_单个| GLUT_RGB | GLUT_深度);
glutInitWindowSize(600600);
位置(100100);
“你好”;
init();
glutDisplayFunc(显示器);
键盘Func(键盘);
glutMainLoop();
返回0;
}
请注意,GL\u POLYGON
仅支持凸多边形。如果没有代码和/或错误屏幕截图,没有人可以帮助您。你需要提供更多的信息。我已经上传了代码…请现在检查。现在我应该在哪里添加用于制作树桩的圆柱体的代码。假设希望圆柱体与场景的其余部分一起旋转,则是在推/弹出矩阵对中的glPopMatrix()
line>之后。