❶ 求解一个C++的opengl程序:绘制彩色正五边形
主要是OPENGL的一个初始化,这个pudn里面有一大堆
❷ 如何用opengl实现五角星的滚动和放缩
给你个思路,五角星的顶点肯定是在一个圆上,知道这个圆的顶点,再计算出5个顶点的坐标就可以画出一个五角星。在不停的改变圆的顶点和顶点坐标角度就可以改变五角星的位置,模拟出滚动向前的效果
❸ 用OpenGL绘制国旗出现了一点问题
gl_polygon 只能画 凸多边形,
凹多边形 请 分解后再画
下面是 我改的程序
PS: 我这是偷懒的做法, 不要用来画凹多边形, opengl 不保证渲染正确, 虽然 在下面的程序 画的是对的
#include "stdafx.h"
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glut32.lib")
#include "GL/glut.h"
#include "math.h"
#define PI 3.
void Rectangle (void)
{
glPolygonMode(GL_FRONT, GL_FILL);
glBegin(GL_POLYGON);
glColor3f(1.0,0,0);
glVertex2f(0.8,0.5);
glVertex2f(-0.8,0.5);
glVertex2f(-0.8,-0.5);
glVertex2f(0.8,-0.5);
glEnd();
}
void star(float x0,float y0,float d)
{
float d0=d*sin(PI/10)/cos(PI/5);
glPolygonMode(GL_FRONT, GL_FILL);
glColor3f(1.0,1.0,0);
glEnable(GL_POLYGON_SMOOTH);
glBegin(GL_POLYGON);
//就是这行出问题了,都画不出这个凹角,但是我怎么看都看不出有什么问题。
glVertex2f(x0+d0*cos(3*PI/10),y0+d0*sin(3*PI/10));
glVertex2f(x0-d*cos(PI/10),y0+d*sin(PI/10));
glVertex2f(x0-d0*cos(PI/10),y0-d0*sin(PI/10));
glVertex2f(x0-d*sin(PI/5),y0-d*cos(PI/5));
glVertex2f(x0,y0-d0);
glVertex2f(x0+d*sin(PI/5),y0-d*cos(PI/5));
glVertex2f(x0+d0*cos(PI/10),y0-d0*sin(PI/10));
glVertex2f(x0+d*cos(PI/10),y0+d*sin(PI/10));
//下面这行也是,怎么看都看不出有什么错误。
glVertex2f(x0+d0*cos(3*PI/10),y0+d0*sin(3*PI/10));
glEnd();
glBegin(GL_POLYGON);
glVertex2f(x0,y0+d);
glVertex2f(x0+d0*cos(3*PI/10),y0+d0*sin(3*PI/10));
glVertex2f(x0-d0*cos(3*PI/10),y0+d0*sin(3*PI/10));
glEnd();
}
void display()
{
glClearColor (1.0, 1.0, 1.0, 0.0);
glClear (GL_COLOR_BUFFER_BIT);
Rectangle();
star(-0.58,0.25,0.1);
float x=-0.58;
float y=0.25;
float d=0.035;
float l=0.22;
float angle=PI/5;
for (int i=1; i<5; i++)
{
float x0,y0;
x0=x+l*sin(angle*i);
y0=y+l*cos(angle*i);
star(x0,y0,d);
}
glFlush();
}
void init()
{
glClearColor(1.0,1.0,1.0,0.0);
glColor3f(1.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0,1.0,-1.0,1.0);
}
int main(int argc, char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(200,150);
glutCreateWindow("Flag");
glutDisplayFunc(display);
init();
glutMainLoop();
return 0;
}
❹ opengl编程怎么画空心五角星
开始也困惑在这个问题,后来发现是参考代码错误,楼主可以将五角星的边长从1改变,比如0.5,就会画出一个错误的图形,所以我对其进行修改,代码如下: int i; GLfloat a = sqrt(0.2 / (2 - 2 * cos(72 * Pi / 180))); GLfloat bx = a * cos(18 *...
❺ 怎么用opengl画五角星
首先你要有五角星五个顶点的坐标,可以通过在圆上找五等分点确定。
比如一个半径为10的圆的轨迹是(R*cos(a), R*sin(a)),a是角度,从0到2*pi,
那么只要确定a为2*pi/5, (2pi/5)*2, ...,2pi时得到的五个点就可以了。当然为了好看应该a从pi/2开始,然后递增2pi/5...
有了这五个点,接下来只要用openGL里面的划线函数链接起来对应点就可以了。
gl_line(第一点,第三点);//似乎是这个函数,记不大清楚了
gl_line(第二点,第四点);
。。。
gl_line(第五点,第二点);
或者把上面的过程写成一个循环,不过要注意第五个点之后下一个点是第一个点。
❻ OPENGL绘图 用一个循环语句画出五角星
#include"glut.h"/*注意!!*/
#include<math.h>
#include<stdio.h>
#include<windows.h>
#definePi3.141592653
floatangle;
floatoffset=20;
intlines;
voidsetLine(inti)
{
if(i<3)i=3;
angle=360.0/i;
lines=i;
}
voidvertexPrint()
{
inti;
floatx,y,length=0.5;
glBegin(GL_POLYGON);
for(i=0;i<lines;i++)
{
length=i%2==0?0.3:0.7;
y=sin(Pi*(i*angle+offset)/180.0)*length;
x=cos(Pi*(i*angle+offset)/180.0)*length;
glColor3f(i%2==1?1:0,i%2==1?0:1,0);
glVertex2f(x,y);
}
glEnd();
}
voiddisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
vertexPrint();
// printCube();
glFlush();
}
intdir=1;
voidmyidle()
{
inti,j;
offset+=dir;
if(offset>360)dir=-1;
if(offset<0)dir=1;
for(i=0;i<5000;i++)for(j=0;j<1000;j++);
glutPostRedisplay();
}intmain(intargc,char*argv[])
{
glutInit(&argc,argv);
glutCreateWindow("");
offset=72;
setLine(10);
glutDisplayFunc(display);
glutIdleFunc(myidle);
glutMainLoop();
}
注意配置好OpenGL的编译环境,我这里使用了GLUT。
❼ 我想用opengl画一个五角星,为什么执行后只出现呢一个黑框“请按任意键继续”,然后就什么都没有了呀!
glutMainLoop;后面有个括号的 正确:glutMainLoop();
望采纳
❽ OPENGL绘制五角星的问题
开始也困惑在这个问题,后来发现是参考代码错误,楼主可以将五角星的边长从1改变,比如0.5,就会画出一个错误的图形,所以我对其进行修改,代码如下:
int i;
GLfloat a = sqrt(0.2 / (2 - 2 * cos(72 * Pi / 180)));
GLfloat bx = a * cos(18 * Pi / 180);
GLfloat by = a * sin(18 * Pi / 180);
GLfloat cx = a * cos(54 * Pi / 180);
GLfloat cy = -a * sin(54 * Pi / 180);
GLfloat
PointA[2] = { 0, a },
PointB[2] = { bx, by },
PointC[2] = { cx, cy },
PointD[2] = { -cx, cy },
PointE[2] = { -bx, by };
glClear(GL_COLOR_BUFFER_BIT);
// 按照A->C->E->B->D->A的顺序,可以一笔将五角星画出
glBegin(GL_LINE_LOOP);
glVertex2fv(PointA);
glVertex2fv(PointC);
glVertex2fv(PointE);
glVertex2fv(PointB);
glVertex2fv(PointD);
glEnd();
楼主可以试下这段代码。
❾ 老师布置的作业,在vs2008下,用c#语言,opengl技术画一面五星红旗,求高手帮忙啊
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CsGL.OpenGL;
namespace mySecondExample
{
public partial class OGLview : OpenGLControl
{
public OGLview()
{
InitializeComponent();
}
protected override void InitGLContext()
{
base.InitGLContext();
GL.glClearColor(1.0f, 0.0f, 0.0f, 0.0f); // 设置OpenGl视图空间的背景色为黑色
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
GL.glMatrixMode(GL.GL_PROJECTION); // 将变换矩阵模式设为投影变换
GL.glLoadIdentity(); // 加载投影变换单位矩阵重置视景体
// 用正射投影设置一个边长为20个单位的立方体兴视景体
GL.glOrtho(-1.0, 1.0, -1, 1.0, 0, 20);
//TODO: 可添加其他初始化动作
}
protected override void OnSizeChanged(EventArgs e)
{
try
{
base.OnSizeChanged(e);
}
catch (Exception)
{
}
// 设置视口尺寸与视图类控件的尺寸相同
GL.glViewport(0, 0, this.Size.Width, this.Size.Height);
GL.glMatrixMode(GL.GL_MODELVIEW); // 设置当前为模型视图矩阵
GL.glLoadIdentity(); // 重置模型视图矩阵
}
public override void glDraw()
{
GL.glClearColor(1.0f, 0.0f, 0.0f, 0.0f); // 设置OpenGl视图空间的背景色为黑色
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
GL.glColor3f(1.0f, 1f, 0.0f);
/* draw two redish triangles - at upper-right corner */
GL.glBegin(GL.GL_TRIANGLES);
GL.glVertex2f(0f, 0.1f);
GL.glVertex2f(-0.035f, 0.05f);
GL.glVertex2f(0.035f, 0.05f);
GL.glVertex2f(0.035f, 0.05f);
GL.glVertex2f(-0.1f, 0.05f);
GL.glVertex2f(-0.05f, 0f);
GL.glVertex2f(0.035f, 0.05f);
GL.glVertex2f(-0.05f, 0f);
GL.glVertex2f(0.05f, 0f);
GL.glVertex2f(0.05f, 0f);
GL.glVertex2f(0.035f, 0.05f);
GL.glVertex2f(0.1f, 0.05f);
GL.glVertex2f(0.05f, 0f);
GL.glVertex2f(0.07f, -0.07f);
GL.glVertex2f(0f, -0.0f);
GL.glVertex2f(-0.05f, 0f);
GL.glVertex2f(-0.07f, -0.07f);
GL.glVertex2f(0f, 0f);
GL.glEnd();
}
}
}
这是一个五角星 你可以运行试一下
如果合适 那就采纳把 记得分儿~
❿ OpenGL 五角星为什么有些面会消失
3D场景的绘制会出现立体图形的可见部分和不可见部分