问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用OpenGL绘制国旗出现了一点问题

发布网友 发布时间:2022-08-16 03:32

我来回答

1个回答

热心网友 时间:2023-09-28 08:08

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.141592653589793238462643383279

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;

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
天云山传奇的导演是谁(天云山传奇的介绍) 1981年天云山传奇的导演是 1981年天云山传奇的导演是谁 《天云山传奇》不是一部武侠片 难忘《天云山传奇》:王馥荔施建岚洪学敏石维坚,为人们叙说传奇 教育学硕士是不是就业面很窄 枸杞是凉性的还是热性 枸杞是凉性的吗 泰迪狗最便宜的多少钱一只 创维电视rf接口怎么接线 创维电视如何接线 蛋糕店 当学徒 去不去 老师布置的作业,在vs2008下,用c#语言,opengl技术画一面五星红旗,求高手帮忙啊 如何用opengl实现五角星的滚动和放缩 我想用opengl画一个五角星,为什么执行后只出现呢一个黑框“请按任意键继续”,然后就什么都没有了呀!? OPENGL绘图 用一个循环语句画出五角星 2021年2月23日十二属相运势,李居明2021生肖运势运程 钟应堂十二生肖运势2022年,2020年十二生肖运程 2021年2月4日属相运势,2021年十二生肖运势运程 臭豆腐卤水如何避免腐败生蛆 历史文献怎么查 史料和文献在哪儿找? 中国近现代史的历史文献在哪里找到比较真实? 80年代的文献怎么检索 怎么找档案文献的具体日期 财政管理体制的中心组成部分是? 空调分流管 空调分液器直接用铜管焊接用可以吗 空调换热器的分液头必须竖直吗? 谁知道从西安到邯郸要多少钱? 邯郸到西安自驾游多少小时 为什么叫藏书羊肉 把文字编成密码 根与系数的关系是怎样的? 中年男人身高1.75米,体重66公斤,怎样增加体重 2022年12生肖运势详解,2022年是什么生肖? 公务员考非全日制研究生 四川正宗泡椒凤爪做法 泡椒凤爪制作步骤 内裤一个晚上不洗就烂了是什么原因? 内裤放着几天没洗为什么会破 为何换掉的内裤未洗第二天看就有破洞了 穿的内裤换下来、没有洗、等第二天洗就坏了为什么 内裤隔夜洗就裤裆烂是怎么回事 内裤里布老无缘无故烂是怎么回事?早上都是好的,晚上回家就烂了好大块,好几条内裤都是这样,怎么回事 为什么内裤会自己破掉? 请问工伤一次性伤残补助金怎么发放,是发放本人工资的百份之六十吗 一级工伤,伤残津贴:社平工资乘以百分之六十乘以百之九十对吗? 工伤赔偿时 本人平均月缴费工资如果低于统筹地区职工平均工资的60%是按60%算吗? 工伤停工留薪期工资低于社平工资的60%,怎样算 2009年全国各省市中考试题汇编英语45套答案 打水泥墙深70厘米直径40厘米孔需买什么样的电动工具 什么是达芬奇技术?