opengl 编程问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 01:28:30
现在有个程序 在xy平面上画了一个等边8变形 如图 代码如下

//#include "glut.h"
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
#include <math.h>
#define PI 3.14159265
#define PTS 8
#define DIM 3
#define PT_SIZE 5.0

float p[PTS][DIM];

void init()
{
int i;
float ang=45.0*2*PI/360.0;
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);

for(i=0;i<PTS;i++)
{
p[i][0] = cos(i*ang);
p[i][1] = sin(i*ang);
p[i][2] = 0.0;
}
}
void display(void)
{
int i;
glLoadIdentity();

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPointSize(PT_SIZE);
glColor3f(0.0, 1.0, 0.0);
glBegin(GL_POINTS);
for(i=0;i<PTS;i++)
glVertex3f(p[i][0], p

1.可能在win32下没法实现,它glut做的窗体没发持续刷新屏幕,你可以用sdk或mfc做,这样就可以了
2.同样,也要在sdk或mfc中做
3.记录初始时所有坐标位置就行了
4.和窗体的长和宽做比较,超出范围时候,让其等于窗体长或宽
除了2之外,你可以网上找nehe的电子教程,你想要的都有了,第二个分屏的我能在mfc下做,唯一说的是要把OpenGL的视口做成一个类,在不同屏幕中声明其对象,这样才能达到你想的那种实现。
你很急迫的解决这个问题,一个问题尽然提了两次,你要真的很想实现你要的功能,只能到sdk或者mfc中去做,如果你只在win32下glut做的窗体实现,真的不能,或者很难。我在mfc下做OpenGL,可以肯定能完成你这4个功能

对opengl接触不是很多,但第3问可以这样解决:
程序运行状态之前声明一个结构体,保存所有点的位置、斜率、速度等等信息,然后构造函数里对其进行初始化,最后定义两份,一份叫初始点结构体,一份叫可变点结构体,之后的操作都是在OnPaint里重绘时只对可变点结构体操作,然后相应keydown事件里,对虚键是 ->的写功能函数把初始化点结构体赋值给可变点结构体,然后OnPaint里重绘时,可解决第三问。
其它的问题,不是很懂,但可以推荐楼主相关的书,《visual c++ 开发GIS系统》 大部分例子都是可以参照的。