導航:首頁 > 編程語言 > opengl圖形編程五角星

opengl圖形編程五角星

發布時間:2022-06-14 17:30:48

❶ 求解一個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場景的繪制會出現立體圖形的可見部分和不可見部分

閱讀全文

與opengl圖形編程五角星相關的資料

熱點內容
phppdf轉換為圖片 瀏覽:373
聊天室源碼完整版 瀏覽:588
超值優惠購買得兩套源碼 瀏覽:42
日產新陽光壓縮機十大品牌 瀏覽:173
javalong的最大值 瀏覽:340
mcs51單片機外部引腳ea 瀏覽:893
蘋果手機怎麼給app給予信用 瀏覽:10
java實型 瀏覽:148
php判斷顯示 瀏覽:695
聯網的單片機 瀏覽:441
安卓錄屏怎麼保存到相冊 瀏覽:350
c語言與單片機 瀏覽:350
tt伺服器是什麼意思 瀏覽:188
賓士app怎麼修改桌面 瀏覽:53
bat演算法面試題 瀏覽:132
因為加密演算法不同 瀏覽:659
會計員app怎麼下載 瀏覽:41
手機小視頻app怎麼刪掉 瀏覽:503
程序員陳一鳴與妹妹 瀏覽:31
個人所得稅app怎麼採集 瀏覽:530