opengl图形学编程问题

问题描述

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

解决方案

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

解决方案二:

可是怎么调用呢?报错说找不到标识符

时间: 2024-10-10 19:50:35

opengl图形学编程问题的相关文章

opengl图形学背...-opengl怎么把图片由平铺改为填充

问题描述 opengl怎么把图片由平铺改为填充 做一个太阳系的程序 放置的星空背景是一块一块的图片 如何将图片变为全部的背景? 解决方案 这种问题都问 哈哈哈哈 解决方案二: 这种问题都问 哈哈哈哈

opengl 解释编程语句-望各位解释一下这个程序每个步骤的含义

问题描述 望各位解释一下这个程序每个步骤的含义 #include GLfloat xRotated, yRotated, zRotated; void Display(void) { glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0,0.0,-4.0); glRotatef(xRotated,1.0,0.0,0.0); glRotatef(yRotated,0.0,1.0,0.0); glRotatef(zRotat

opengl的编程问题

问题描述 高手看看这个opengl的程序为什么在visualstudio下drawoneline编译不成功呢?#include<glut.h>#include<Windows.h>#include<stdio.h>#include<stdlib.h>#definedrawOneLine(x1,y1,x2,y2)glBegin(GL_LINES);glVertex2f((x1),(y1));glVertex2f((x2),(y2));glEnd();voidi

html5+-求计算器简单加减乘除功能代码

问题描述 求计算器简单加减乘除功能代码 计算器 <!-- 外部css --> <!-- 外部移动层JS --> <!-- 外部计算功能JS --> <br> div{width:100%;height:800px;background:gray;}<br> 简单的计算器 <!-- 表单 --> <!-- 层的边框大小样式颜色 --> </tr> </table> </form> <

《基于MFC的OpenGL编程》Part 2 Setting up OpenGL on Windows

WGL – Windows的 OpenGL扩展层 The WGL extension consists of a set of functions (wglCreateContext, wglDeleteContext etc.) and structures (such as PIXELFORMATDESCRIPTOR, GLYPHMETRICSFLOAT) etc. Thus every OpenGL implementation has a platform-specific portio

《OpenGL编程指南》一第2章 着色器基础

第2章 着色器基础 本章目标阅读完本章内容之后,你将会具备以下能力:区分OpenGL创建图像所用的不同类型的着色器.使用OpenGL着色语言构建和编译着色器.使用OpenGL中提供的多种机制将数据传入着色器.使用高级GLSL着色技巧来创建可复用性更强的着色器.本章将介绍如何在OpenGL中使用可编程着色器(shader).首先介绍OpenGL着色语言(OpenGL Shading Language,通常也称作GLSL),然后详细解释着色器将如何与OpenGL应用程序交互.这一章将会包含以下几节:

opengl-OpenGL入门编程求解答 错误 4 error LNK2001: 无法解析的外部符号 _NtProcessStartup

问题描述 OpenGL入门编程求解答 错误 4 error LNK2001: 无法解析的外部符号 _NtProcessStartup 代码如下,从计算机图形学第三版完整抄下来的程序. 错误就是 4 error LNK2001: 无法解析的外部符号 _NtProcessStartup 求大神 #include #include #include void init(void) { glClearColor(1.0,1.0,1.0,0.0); //窗口背景颜色 glMatrixMode(GL_PRO

Cg编程自学心得

 在计算机图形学领域,用计算机处理图形信息我们最先接触的通常是使用opengl和d3d这些图形编程接口,这些通常称为固定管线的编程,也就是程序员不直接操纵可编程的GPU,在常见的opengl的编程管线中,底层为我们设定了固定的渲染过程,程序员控制的只是这个过程中的各种参数.但是在有些情况下,尤其是硬件性能突飞猛进的今天,为了得到更好的效果,得到对图形计算更好的控制,就需要自己对GPU进行编程,这也就是可编程的图形渲染,这些用于对GPU的编程接口就是GPU语言,CG是NVIDIA开发的针对NVDI

浅述Delphi下的OpenGL图形开发

OpenGL最初是由Silicon图形公司开发的底层图形库规范.你的系统中准确实现这个规范的部分,通常被称为OpenGL驱动,它允许你使用几何集合(点,线,多边形,图像等等)来描述你希望表现的场景.让肉眼观察起来较为舒适的中等规模场景,通常在毫秒级的速度上实现,这意味着该库文件有足够的能力来支持你创建一个生机勃勃的虚拟世界. OpenGL驱动一般以二进制库文件的形式提供.它能够动态的连接到你的程序中.在Windows平台上,它将是成为DLL的形式(在你的系统目录下检查opengl.dll).自从