问题描述
- opengl图形学编程问题
-
// 150502_1.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include
#include
#includeint menu,subMenu1,subMenu2;
void myDraw(void)
{
glClearColor(0.0,0.0,0.0,0.0);//通过glClear使用红,绿,蓝以及AFA值来清除颜色缓冲区的
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);//这里是黑色
glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);
glBegin(GL_POLYGON);glVertex2f(-0.5,-0.5);
glVertex2f(-0.5,0.5);
glVertex2f(0.5,0.5);
glVertex2f(0.5,-0.5);
glEnd();
glutSwapBuffers();
}
void MidpointLine(int x0,int y0,int x1,int y1,int color){
CDC pDC=GetDC();
int a,b,d1,d2,d,x,y;
float m;
if (x1
{
d=x0,x0=x1,x1=d;
d=y0,y0=y1,y1=d;
}
a=y0-y1,b=x1-x0;
if (b==0)
m=-1*a*100;//垂直于x轴,,,m是长度
else
m=(float)a/(x0-x1);//m是斜率
x=x0,y=y0;//起始点
pDC->SetPixel(x,y,color);//画出起始点if (m>=0 && m<=1)
{
d=2*a+b;
d1=2*a,d2=2(a+b);while (x
{
if (d
{
x++,y++,d+=d2;
}
else
{
x++,d+=d1;
}
pDC->SetPixel(x,y,color);//画出起始点
}
}else if (m<=0 && m>=-1)
{
d=2*a-b;
d1=2*a-2*b,d2=2*a;while (x
{
if (d>0)
{x++,y--,d+=d1;
}else
{
x++,d+=d2;
}
pDC->SetPixel(x,y,color);//画出起始点
}
}else if (m>1)
{
d=a+2*b;
d1=2*(a+b),d2=2*b;while (y
{
if (d>0)
{x++,y++,d+=d1;
}else
{
y++,d+=d2;
}pDC->SetPixel(x,y,color);//画出起始点
}
}else
{
d=a-2*b;d1=-2*b,d2=2*(a-b);while (y>y1)
{
if (d<=0){
x++,y--,d+=d2;
}else
{
y--,d+=d1;
}pDC->SetPixel(x,y,color);//画出起始点
}
}
}/*写出当前是哪个菜单*/
void GetCurrentMenu(void)
{
int nMenu;
nMenu = glutGetMenu();
if(nMenu == menu)
printf("The current menu is Main Menu.n");
if(nMenu == subMenu1)
printf("The current menu is SubMenu1.n");
if(nMenu == subMenu2)
printf("The current menu is SubMenu2.n");
}/*子菜单1*/
void SubMenuFunc1(int data)
{
GetCurrentMenu();
switch(data)
{case 1:
printf("SubMenu1's item 1 is triggered.n"); //红色
break;
case 2:
printf("SubMenu1's item 2 is triggered.n"); //绿色
break;case 3:
printf("SubMenu1's item 3 is triggered.n"); //蓝色
break;}
}
void MenuFunc(int data)
{
GetCurrentMenu();
switch(data)
{case 1:
MidpointLine(0.0f,0.0f,0.3f,0.3f,1);
printf("MainMenu's item 1 is triggered.n"); //画一条线
break;case 2:
printf("MainMenu's item 2 is triggered.n");//画一个三角形
break;
case 3:
printf("MainMenu's item 3 is triggered.n"); //应该是没有任何反应
break;
}
}
int _tmain(int argc, char argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); //设置显示方式,其中GLUT_RGB表示使用RGB颜色
glutInitWindowSize(500,400); //设置窗口的大小
glutInitWindowPosition(100,100);//设置窗口在屏幕中的位置
/创建窗口*/
glutCreateWindow(" 郑爱玉 13080001");//参数将被作为窗口的标题
glutDisplayFunc(myDraw); //设置一个函数,当需要进行画图时,这个函数就会被调用。
/*创建子菜单1并加入菜单条目*/
subMenu1 = glutCreateMenu(SubMenuFunc1);
glutAddMenuEntry("红色",1);
glutAddMenuEntry("绿色",2);
glutAddMenuEntry("蓝色",3);
glutAttachMenu(GLUT_RIGHT_BUTTON);
/*创建主菜单并加入菜单条目及子菜单*/
menu = glutCreateMenu(MenuFunc);
glutAddMenuEntry("绘制一条直线",1);
glutAddMenuEntry("绘制一个三角形",2);
glutAddSubMenu("更改当前图形颜色",subMenu1);
glutAttachMenu(GLUT_RIGHT_BUTTON);glutMainLoop();//进入GLUT事件处理循环
return 0;
}不太懂那个setPixel函数怎样调用……opengl不太会,但是图形学算法和其他编程语言略懂。请指教。
解决方案
setPixel函数很简单,就是在指定坐标处画一个点
解决方案二:
可是怎么调用呢?报错说找不到标识符