qq_27888667 2015-05-03 03:05 采纳率: 0%
浏览 1803

opengl图形学编程问题

// 150502_1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
#include
#include

int 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不太会,但是图形学算法和其他编程语言略懂。请指教。

  • 写回答

2条回答 默认 最新

  • devmiao 2015-05-03 04:46
    关注

    setPixel函数很简单,就是在指定坐标处画一个点

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作