OpenGL 画多只恐龙 运用选择/缩放/平移操作

STL文件缩略图生成:Windows资源管理器3D模型预览解决方案 在三维模型文件管理与3D打印工作流中,STL作为描述几何表面的标准格式,其可视化预览一直是效率瓶颈。操作系统通常无法原生生成其缩略图,导致用户在文件管理时需依赖重型建模软件加载,严重影响操作效率。其核心原理在于通过Windows Shell扩展机制,注册为缩略图处理器,当资源管理器需要显示图标时,实时调用该扩展。该技术通过解析STL文件的三角形面片数据,并利用OpenGL进行轻量级离屏渲染,快速生成位图交付系统显示,实现了毫秒级的预览响应。其技术价值在于以近乎零感知的集成方式,将文件夹视图从文本列表升级为可 阅读详情

                                      OpenGL  画多只恐龙 运用选择/缩放/平移操作

抽取自书本,简化了下,这本书真是讨厌,写个简单的程序花那么多弯路,也许对为大程序准备吧;

说实话,书本作者的代码还真是乱啊,编程水平也不像大神水准。《计算机图像学 OpenGL版》第三版  清华大学出版社

//画多只恐龙
//rorger, 2011


#include "vector"
#include "fstream"
#include "glut.h"
#include "iostream"
using namespace std;
struct Point{
	int x ;
	int y ;
};

enum Direction
{
	LEFT,RIGHT,UP,DOWN
} ;

Direction oriDirection=LEFT,myDirection ;
float horizontalDir=1.0;
float verticalDir = 1.0 ;

typedef vector<Point> Polygon;
typedef vector<Polygon> PolyLines ;
PolyLines dimo ;
bool beRotated=true;

void loadData(char * fileName)
{
	ifstream inStream ;
	inStream.open(fileName);
	if (inStream.fail())
	{
		cout<<"can not open file :"<<fileName<<endl;
		return;
	}
	GLint numPolygon ,numPolyLines ;
	Point currentPoint ;
	inStream >> numPolyLines;
	Polygon currentPolygon ;
	for (int i =0 ; i < numPolyLines;i++)
	{
		inStream >> numPolygon  ;
		currentPolygon.clear();
		for (int j=0;j<numPolygon ;j++)
		{
			inStream >> currentPoint.x>>currentPoint.y ;
			currentPolygon.push_back(currentPoint);
		}
		dimo.push_back(currentPolygon);
	}
	inStream.close();
	cout<<"read file: "<<fileName<<"success!"<<endl;
}

void drawDimo()
{
	for (unsigned int i=0;i<dimo.size();i++)
	{
		glBegin(GL_LINE_STRIP);
		for (unsigned int j=0;j<dimo[i].size();j++)
		{
			glVertex2i(dimo[i][j].x,dimo[i][j].y);			
		}
		glEnd();
	}
}

void myDisplay(void) 
{
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glClear(GL_COLOR_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	glTranslatef(320.0,240.0,0.0);
	glScaled(0.1,0.1,1.0);
	glColor3f(0.0f, 1.0f, 0.0f);
	for (float theta=0;theta<360;theta+=30)
	{
		glPushMatrix();
		glMatrixMode(GL_MODELVIEW);
		glRotatef(theta,0.0,0.0,1.0);
		glTranslatef(0.0,850,0.0);
		if(!beRotated)
			glRotatef(-theta,0.0,0.0,1.0);
		switch(myDirection)
		{
		case LEFT:
				horizontalDir=1.0;
				glScaled(horizontalDir,verticalDir,1.0);
			break;
		case RIGHT:
				horizontalDir=-1.0;
				glScaled(horizontalDir,verticalDir,1.0);
			break;
		case DOWN:
				verticalDir=-1.0;
				glScaled(horizontalDir,verticalDir,1.0);
			break;
		case UP:
				verticalDir=1.0;
				glScaled(horizontalDir,verticalDir,1.0);
			break;
		}
		drawDimo();
		glPopMatrix();
	}
	glFlush();
}

void myInit(void)
{			
	glClearColor(0.0, 0.0, 0.0, 0.0);     
	glColor3f(0.0f, 1.0f, 0.0f);            
	glMatrixMode(GL_PROJECTION); 
	glLoadIdentity(); 
	gluOrtho2D(0,650,0,480);
	loadData("dino.dat");
}

void myKeyboardFunc(unsigned char key,int x, int y)
{
	 
	switch ( key)
	{
	case 'q':
	case 'Q':
		exit(0);
		break;
	case ' ':
		beRotated=!beRotated;
		break;
	case 'a':
	case 'A':
		myDirection= LEFT;
		break;
	case 'd':
	case 'D':
		myDirection = RIGHT;
		break;
	case 'w':
	case 'W':
		myDirection = UP;
		break;
	case 's':
	case 'S':
		myDirection=DOWN;
		break;
	}
	glutPostRedisplay();
}

int main(int argc,char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(640,480);
	glutInitWindowPosition(100,150);
	glutCreateWindow("MyDimo");
	glutDisplayFunc(myDisplay);
	glutKeyboardFunc(myKeyboardFunc);
	myInit( );
	glutMainLoop( );
}


书上是按q退出,按空格可以改变恐龙的旋转和平移;

我特意增加了 w a s d 四个方向键,控制方向;感觉不错;

上图:

关于 dimo.dat文件可以在上一篇博文中找到

OpenGL的视图和模型变换 初学OpenGL,怎么也得先搞懂坐标轴吧?几经周折,最后选择从视图和模型变换下手。 OpenGL的两个坐标系 世界坐标系: 以窗口的中心为坐标原点,X轴正方向为屏幕从左至右,Y轴正方向为屏幕从下至上,Z轴正方向为屏幕指向你。 无论如何进行变换,世界坐标系是始终不动的。 当前绘图坐标系(局部坐标系): 当前绘图坐标系为当前绘制图形的坐标系。OpenGL初始化之后,当前绘图坐标系与 阅读详情

相关推荐

dino用opengl描点画图-恐龙

dino用opengl描点画图-恐龙 经典题目 不用多说了吧。

画恐龙--通过OpenGL

修改《计算机图形学(OpenGL)》中的小错误#include#include#include#include#include#include///////////////////////////////myInit////////////////////////////////void myInit(void){  glClearColor(1.0,1.0,1.0,0.0);  glCo

斯凡的专栏 1884

opengl绘制恐龙图形

利用VC++,opengl来读取文件,进行图形的绘制

OPENGL学习笔记(一)画一只dinosaur

OpenGL这个库好,比起之前用过的opencv,cuda等开放库,opengl才几兆,不用安装,而且相对于VTK来说,OpenGL封装好的函数较为底层,灵活度较高,也可以更好地体现自己编写的算法的好坏。 OpenGL写程序先要OpenGL的头文件,lib,.dll相关配置可以在网上找到,这里不再累述。 对一个像我一样的初学者来...

weixin_33695450的博客 541

COMSOL后处理与可视化

公众号→【COMSOL仿真交流】←更多精彩内容 后处理是采用COMSOL建模的一个重要环节。通过软件自带的可视化工具,可以快速方便的展现仿真结果。 COMSOL为使用者提供了多种后处理工具,包括表面图、切面图、等值线图、流线图、线图、体图等等。可按功能分为数据集(储存数据的地方)、派生值和表单(对数据进行进一步的操作)、绘图组合绘图类型(显示数据结果的地方)、导出数据与生成报告。   如果想用origin、matlab对模拟数据做进一步的处理,导出excel格式的模拟结果,这可以通过“导出

midiio的博客 4027

R语言绘图中文显示全攻略:从乱码到完美适配

本文详细解析了R语言绘图中的中文显示问题,从乱码根源到完美适配方案。通过showtext、sysfonts和extrafont等工具包的应用,提供跨平台的中文显示解决方案,涵盖ggplot2图表、PDF/PNG输出及Shiny应用等场景,助力用户高效实现R绘图中文完美呈现。

hp777的博客 257

新手必看:android-3D-model-viewer核心功能详解,10分钟上手3D模型查看

android-3D-model-viewer是一款基于Android OpenGL 2.0技术开发的3D模型查看应用,能够帮助用户在移动设备上轻松加载、查看和交互各类3D模型文件。无论你是3D设计爱好者、开发者还是初学者,都能通过这款工具快速体验3D模型的魅力。 ## 🚀 核心功能一览 ### 支持多种3D模型格式 应用支持主流的3D模型格式,包括OBJ、DAE、GLB、GLTF等,满足不

gitblog_00589的博客 824

Hermes-Agent-完整指南

Hermes Agent 是由 **Nous Research** 开发的一款**自我改进型 AI Agent**,具有内置的学习闭环系统。它的核心理念是"一个与你共同成长的 Agent"。- 能够从经验中创建技能(Skill-Learning Automated),在使用过程中自我改进, 跨会话持久记忆, 深度用户建模

liu_zhiyi的博客 3032

可以移动的恐龙--用键盘让恐龙具有生命 dino.dat文件绘制恐龙 a d w s移动恐龙 源代码

可以移动的恐龙--用键盘让恐龙具有生命 dino.dat文件绘制恐龙 a d w s移动恐龙 源代码

haimian520的专栏 2315

esp32 python开发环境搭建_eclipse esp32开发环境搭建

安装方法基本是按照官网提供的方法来操作https://github.com/espressif/idf-eclipse-plugin#GettingStarted但是官网的方法安装之后还是不能编译成功的,第一次编译会出现一下问题问题1:Building in: E:\eclipse-workspace\helloworlk\buildcmake -G Ninja -DCMAKE_TOOLCHAIN...

weixin_39978276的博客 1263

爬虫风控实战:当你的代理IP被数美滑块盯上时,如何优雅破解?

本文深入探讨了爬虫风控对抗中数美滑块验证码的破解与防御策略。通过分析数美滑块的多层防御机制,提出了代理IP池精细化管理、请求特征拟人化改造以及工程化滑块验证解决方案等系统性方法,帮助开发者有效降低验证码触发率,提升爬虫效率。

weixin_27419879的博客 206

OpenGL_恐龙

#include "stdafx.h" #include <GL/glut.h> #include <iostream> #include <fstream> using namespace std; void myInit(void) { glClearColor(1.0, 1.0, 1.0, 0.0);//背景颜色为...

252

安卓风控对抗实战:如何用AOSP定制ROM绕过Momo、AIDA64等检测(从环境搭建到设备画像)

本文详细解析了如何通过定制AOSP ROM绕过Momo、AIDA64等安卓风控检测工具的设备指纹识别。从环境搭建到硬件参数修改,再到内核级特征混淆,提供了一套完整的底层对抗方案,显著提升设备伪装通过率。

weixin_30687051的博客 489

OpenGL 画一只恐龙(简化抽取自书本)

OpenGL 画一只恐龙 图形学书上有一只线条恐龙,这么easy的恐龙,书本把它搞得那么复杂,真是打击我。于是我简化了下:先看看主代码吧://画一只恐龙 //rorger, 2011 #include "vector" #include "fstream"

1884

宇树G1语音助手完整开发指南(上)——从零构建智能知识库对话系统

本文将详细介绍如何为宇树G1人形机器人开发一个,实现"唤醒 → 对话 → 查询 → 回复"的智能助手功能。

m0_47999117的博客 783

YoloV8改进策略:基于双层路由注意力的视觉Transformer提升YoloV8的检测能力

本文使用2023年最新提出的BiFormer,实现对YoloV8的改进。目前,BiFormer还有在显存占用,还有性能存在问题。我们先试试效果,期待作者在Pytoch上早日实现优化。论文链接:https://arxiv.org/abs/2303.08810代码链接:https://github.com/rayleizhu/BiFormer作为视觉transformer的核心构建模块,注意力是捕捉长程依赖关系的强大工具。

m0_47867638的博客 2845

理解OpenGL中的模型视图矩阵变换

对于学习OpenGL,或者其他的API,基础的矩阵变换是最重要的。矩阵变换是重中之重。下面就拿红皮书上的最简单的demo:cube.c来说。调用函数 glMatrixMode (GL_MODELVIEW);指定修改模型视图矩阵,以后调用glLoadIdentity ();  将当前的矩阵置为单位矩阵,有利于后面的运算。下面我们假设将对创建的模型glutWireCube (1.0); 进

dizuo的专栏 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[OpenGL] glTranslatef(); glScaled(); glRotatef(); 函数介绍

这几个函数是OpenGL图形开发包自带的函数。 glTranslatef(0.0f,-20.0f,-40.0f):表示将当前图形向x轴平移0,向y轴平移-20,向z轴平移-40 glScaled(10.0f,10.0f,10.0f):表示将当前图形沿x,y,z轴分别放大为原来的10倍 glRotatef(-80.0f,1...

weixin_34055787的博客 625

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

OpenGL图像平移、旋转基本操作总结

在OpenGL里面使用glTranslatef()、glRotatef()等函数可以图形的平移、旋转等。 1、在变换的时候都是对绘图坐标系进行的变换,所以在此坐标系中画的图都会被变换;如果要画两个图,但只想对第一个图进行变换,第二个图不变换或者进行不同的变换,这个时候就需要注意一点:在前一个图使用变换矩阵的时候加上: glPushMatrix(); glTranslatef(); /

云水一笔 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OpenGL绘制方式

图元 点:                                GL_POINTS 线:                                GL_LINES 条带线:                        GL_LINE_STRIP 循环线:                        GL_LINE_LOOP 独立三角形:

愿世界和平的IT劝退师 709

窗口window 和 视口 viewport 恐龙平铺 源代码

相关代码 : 窗口: glutInitWindowsSize(width, height);    glutInitWindowPosition(xPosition, yPosition);  它是你设定的大小 如 640*480;是一个逻辑的概念。(不变) 视口 : glViewport(GLint x, GLint y, GLsizei width ,GLsizei height);

haimian520的专栏 823
上一篇: OpenGL 画多只恐龙 运用选择/缩放/平移操作
下一篇: OpenGL 3d 入门
rorger
博客等级 码龄16年 62粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值