首页 > 其他分享 >(4)---【位图填充】【C语言】【OpenGL库】【计算机图形学】

(4)---【位图填充】【C语言】【OpenGL库】【计算机图形学】

时间:2024-11-10 18:50:33浏览次数:3  
标签:OpenGL 0.0 0x00 图形学 glVertex2i C语言 400 100 GL

 本次实验项目 

        多边形位图填充图形

功能简单介绍

        本实验填充特定图案的图形“大裤衩子”。程序中定义了一个位图数组fly,这个数组被用来通过glPolygonStipple函数创建多边形的点模式填充效果。图形由两个绿色的多边形组成,代表“大裤衩”的左右两部分,以及一些灰色的线条作为点缀。

代码

#include <windows.h>
#include <GL/glut.h>  

#define GLUT_DISABLE_ATEXIT_HACK

//定义位图存放在共10行每行16位分成前后8位无符号整数块的数组 
GLubyte fly[20] = {  
    0x1c, 0x00, 0x1c, 0x00,0x1c, 0x00,0x1c, 0x00, 0x1c, 0x00,
	0xff, 0x80, 0x7f, 0x00,0x3e, 0x00,0x1c, 0x00, 0x08, 0x00 };

//(注)图元结构中应该使用凸多边形
void designs(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和缓存区
	glLoadIdentity(); //还原矩阵状态 
	//图案绘制 
	glEnable(GL_POLYGON_STIPPLE);//启用多边形点模式
	glPolygonStipple(fly);//根据fly数组的点模式来决定哪些像素点被绘制出来,从而创建出特定的图案效果
	
	
//大裤衩子 
	//glPointSize(20);//点的尺寸 //glLineWidth(5);//线的尺寸 
	
	glColor3f(0.0,1.0,0.0);
    //左半部分
	glBegin(GL_POLYGON);
	  	glVertex2i(300,300);
	  	glVertex2i(200,100);
		glVertex2i(100,100);
		glVertex2i(100,500);
		glVertex2i(300,500);
	glEnd();
	//右半部分
	glBegin(GL_POLYGON);
		glVertex2i(300,300);
		glVertex2i(400,100);
		glVertex2i(500,100);
		glVertex2i(500,500);
		glVertex2i(300,500);
	glEnd();

	glDisable(GL_POLYGON_STIPPLE);
//点缀图案 
	glColor3f(0.7,0.7,0.7);
	glBegin(GL_LINE_LOOP);
		glVertex2i(350,350);
		glVertex2i(400,350);
		glVertex2i(400,400);
		glVertex2i(350,400);
	glEnd();
	
	glBegin(GL_LINE_LOOP);
		glVertex2i(250,350);
		glVertex2i(200,350);
		glVertex2i(200,400);
		glVertex2i(250,400);
	glEnd();
	
	glFlush();
}

void init(void)
{
	glClearColor(0.0,0.0,0.0,0.0);
	glMatrixMode(GL_PROJECTION);
	gluOrtho2D(0.0,600.0,0.0,600.0);
	glMatrixMode(GL_MODELVIEW);//设置矩阵模式
}

int main(int argc, char** argv){  
    glutInit(&argc, argv);  
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);  
    glutInitWindowPosition(100,100);  
    glutInitWindowSize(600,600);  
    glutCreateWindow("HelloOpenGL-多边形位图填充");  
    init();
    glutDisplayFunc(designs);
	glutMainLoop(); 
	return 0; 
}  

运行结果

上手实践

        各位学有余力的先生和女士,如有兴趣的话,不妨参考上面内容,动手改用自己喜欢的位图图案并用多边形填充吧!祝你成功! 

标签:OpenGL,0.0,0x00,图形学,glVertex2i,C语言,400,100,GL
From: https://blog.csdn.net/2303_77716250/article/details/143650716

相关文章

  • C语言字符串和十六进制的相互转换方式
    C语言字符串和十六进制的相互转换方式-我就叫宋帅呀-博客园C语言的字符串操作并不像java,Csharp那样提供直接的方法,简单粗暴。所以,在转换的时候往往费力费时,近日做项目正好用到和java程序通讯,java发送过来的数据是十六进制数字组成的字符串,解析的时候颇费心思才算完成,所以......
  • (5)---【DDA画线算法】C语言-OpenGL库-计算机图形学
    本次实验项目         DDA画线算法理解与运用。算法介绍        DDA(DigitalDifferentialAnalyzer)画线算法是一种基于数值微分原理的直线生成算法。它主要用于在光栅系统中绘制直线,即在像素点阵中生成直线。DDA算法的核心思想是从一个端点开始,通过增量,逐......
  • 实验4 C语言数组应用编程
    实验任务1:task1.c源代码:1#include<stdio.h>2#defineN43#defineM245voidtest1(){6intx[N]={1,9,8,4};7inti;89printf("sizeof(x)=%d\n",sizeof(x));1011for(i=0;i<N;++i)......
  • 【C语言】解决error C4996: 'fopen': This function or variable may be unsafe. Cons
    几天编译文件的时候报错,编译出错信息:错误1errorC4996:'fopen':Thisfunctionorvariablemaybeunsafe.Considerusingfopen_sinstead.Todisabledeprecation,use_CRT_SECURE_NO_WARNINGS.Seeonlinehelpfordetails.意思就是fopen不安全,推荐你用fopen_s,这个时......
  • 实验4 c语言数组应用编程
    task1:1#include<stdio.h>2#include<stdlib.h>3#defineN44#defineM2567voidtest1(){8intx[N]={1,9,8,4};9inti;1011printf("sizeof(x)=%d\n",sizeof(x));1213for(i=0;i<N;++i)14......
  • OpenGL 和 GLSL 在顶点着色器中动态调整裁剪平面参数的简单代码示例
    以下是一个使用OpenGL和GLSL在顶点着色器中动态调整裁剪平面参数的简单代码示例://OpenGL初始化代码#include<GL/glew.h>#include<GLFW/glfw3.h>#include<iostream>GLFWwindow*window;//初始化GLFWvoidinitGLFW(){if(!glfwInit()){std::cer......
  • GPU OpenGL 管线
    GPUOpenGL管线主要分为以下几个阶段:顶点数据输入:数据定义与准备:开发者定义要渲染的图形的顶点数据,这些数据包含了每个顶点的位置、颜色、纹理坐标、法线向量等信息。例如,对于一个简单的三角形,需要指定三个顶点的三维坐标以及相关属性。这些数据通常存储在内存中,可以通过数组......
  • 洛谷题单入门1顺序结构(C语言版)
    【入门1】顺序结构Hello,World!#include<stdio.h>intmain(){printf("Hello,World!");return0;}输出字符菱形#include<stdio.h>intmain(){printf("*\n");printf("***\n");printf("*****\n&q......
  • 在OpenGL中实现视角切换插值过渡动画
    在OpenGL中实现视角切换插值过渡动画可以通过以下步骤来完成:一、定义视角结构体首先,需要定义一个结构体来表示视角相关的信息,通常包括观察位置(EyePosition)、观察目标点(LookAtPoint)和上方向向量(UpVector)。例如:structCamera{glm::vec3eye;glm::vec3center;......
  • 超详细C语言函数栈帧的创建和销毁的过程讲解,细节满满
    目录一、ebp和esp二、main函数的函数栈帧(解释反汇编)(1)、push操作(2)、mov操作(3)、sub操作(4)、然后又是三个push操作(5)、lea操作:(6)、接着四步操作:三、如何创建的变量(创建变量的反汇编)(1)、第一个inta=10:此时如果没有给a变量赋值,那么该位置的值就是CCCCCCCC,这就是为什么未......