opengl之glScalef()函数

机械工程师如何用Codex实现CAD自动化:从重复劳动到智能设计 在机械设计领域,CAD二次开发长期面临学习门槛高、维护成本大的难题。随着AI编程助手如Codex的出现,通过自然语言生成可执行代码,工程师无需精通编程即可实现图纸批量处理、BOM表自动生成、参数化建模等任务。这种技术将重复性操作自动化,显著提升设计效率,让工程师聚焦于核心创新。应用场景涵盖批量修改图纸属性、跨软件数据流转、自动打印等。本文分享机械工程师利用Codex落地自动化的实战经验与避坑指南。 阅读详情

glScalef是openGL中的模型缩放函数,就是把当前矩阵与一个表示延各个轴对物体进行拉伸、压缩、反射的矩阵相乘。这个物体的每个点的x,y,z坐标与对应的xyz参数相乘。

先看函数定义
void glScalef(GLfloat x,
       GLfloat y,
       GLfloat z);

参数x,y,z分别为模型在x,y,z轴方向的缩放比。

例如:
如glScalef(2.0f,3.0f,4.0f);将模型按x,y,z方向分别拉伸了2,3,4倍。
参数也可取负数,也可以理解为先关于某轴翻转180°,再缩放;
如glScalef(1.0f,1.0f,-1.0f);将模型关于z轴翻转了180°(即关于xy轴所在平面对称);

如glScalef(1.0f,1.0f,-2.0f);将模型关于-z轴拉伸2倍。

下面通过具体的代码进行说明:

这段代码中主要功能是实现鼠标按键出发事件,就不一一截图了,大家自行运行体会

// 001.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <GL/glut.h>
#include "math.h"

float seta = 0;

float mx=0,my=0,mz=-50,rx=0,ry=0,rz=0;//平移和旋转

float sx=1,sy=1,sz=1;//缩放

float mspeed=1.5,rspeed=1;
void myDisplay(void);
void myTimerFunc(int val)
{
	seta+=1;
	myDisplay();
	glutTimerFunc(1,myTimerFunc,0);
}

void myKeyboardFunc(unsigned char key,int x, int y)
{
	switch(key)
	{
	case 'w':
		my+=mspeed;
		break;
	case 's':
		my-=mspeed;
		break;
	case 'a':
		mx-=mspeed;
		break;
	case 'd':
		mx+=mspeed;
		break;
	case 'q':
		mz+=mspeed;
		break;
	case 'e':
		mz-=mspeed;
		break;


	case 'i':
		rx+=rspeed;
		break;
	case 'k':
		rx-=rspeed;
		break;
	case 'j':
		ry-=rspeed;
		break;
	case 'l':
		ry+=rspeed;
		break;
	case 'u':
		rz+=rspeed;
		break;
	case 'o':
		rz-=rspeed;
		break;


	case '1':
		sx+=0.1;
		break;
	case '2':
		sx-=0.1;
		break;
	case '3':
		sy+=0.1;
		break;
	case '4':
		sy-=0.1;
		break;
	case '5':
		sz+=0.1;
		break;
	case '6':
		sz-=0.1;
		break;
	}
}
void SetRC()
{
	glShadeModel(GL_FLAT);
//	glEnable(GL_CULL_FACE);
	glFrontFace(GL_CCW);

	glEnable(GL_DEPTH_TEST);
	glPolygonMode(GL_BACK,GL_LINE);
}
void myDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
	glPushMatrix();
	//模型控制
	glTranslatef(mx,my,mz);
	glRotatef(rz,0,0,1);	//r
	glRotatef(rx,1,0,0);	//p
	glRotatef(ry,0,1,0);	//h
	glScalef(sx,sy,sz);

	//绘制三角扇
	glBegin(GL_TRIANGLE_FAN);
	glVertex3f(0,20,0);
	GLfloat angle,x,y=0,z;
	int iPivot = 1;//标记颜色
	for(angle = 0;angle<2*3.14;angle+=3.14/8)
	{
		x = 20*sin(angle);
		z = 20*cos(angle);
		if(iPivot%2)
			glColor3f(1,0,0);
		else
			glColor3f(0,1,0);
		iPivot++;
		glVertex3f(x,0,z);
	}
	glEnd();
	glPopMatrix();
	glutSwapBuffers();
}

void myReshape(int w,int h)
{	
	GLfloat nRange = 100.0f;
	glViewport(0,0,w,h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(60,GLfloat(w)/h,1,1000);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}
int main(int argc, char *argv[])
{
	//初始化opengl环境
    glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
	//创建窗口
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(400, 400);
    glutCreateWindow("第一个OpenGL程序");
	//设置相关回掉函数
    glutDisplayFunc(&myDisplay);//绘制三角形
	glutTimerFunc(1,myTimerFunc,0);//设置计时器
	glutReshapeFunc(&myReshape);//
	glutKeyboardFunc(&myKeyboardFunc);//
	//初始化opengl绘制状态
	SetRC();
	//进入消息循环
    glutMainLoop();
    return 0;
}


在Pycharm中配置Pyqt5工具(2023年新版教程) 在Pycharm中配置Pyqt5相关的三个工具:QtDesigner、PyUIC、PYRCC 阅读详情

相关推荐

LangGraph实战:用Python异步构建智能客服多轮对话系统(附完整代码)

本文详细介绍了如何使用LangGraph框架和Python异步编程构建一个高性能的智能客服多轮对话系统。通过将对话流程建模为有向图,结合thread_id实现多用户对话隔离,并利用异步节点提升系统并发处理能力,有效解决了传统客服系统上下文遗忘与高并发瓶颈问题。文章提供了从环境搭建、状态管理、异步优化到复杂业务逻辑与部署的完整实战代码。

weixin_29055137的博客 149

OpenGL的glScalef缩放变换函数详解

glScalef是openGL中的模型缩放函数,就是把当前矩阵与一个表示延各个轴对物体进行拉伸、压缩、反射的矩阵相乘。这个物体的每个点的x,y,z坐标与对应的xyz参数相乘。 先看函数定义void glScalef(GLfloat x,        GLfloat y,        GLfloat z); 参数x,y,z分别为模型在x,y,z轴方向的缩放比。 例如:如glScal...

weixin_33717298的博客 1798

野火STM32F407(骄阳)+无刷直流驱动板+永磁同步电机控制学习记录(四)(基于HAL库)

以上内容都是参考别人资料自学的,很多地方都是凭感觉,因为理论部分不太会算,只要电机能转就行,其他性能指标都没考虑,因为不会,所以这纯属是学习记录帖。带宽在500时,电流波动小,但是响应很慢,就是堵转后不太容易恢复转动。速度环带宽设定小了,响应不够快,带宽设定大了波动比较大,电机感觉起来也震一点,而且,当带宽设到200的时候,启动直接就锁死了,应该是PI增益设定太大了。电流环带宽的试验:去掉速度环,让Iq_Set=2,Ud=0,此时电机是电流环闭环控制,用手堵转电机然后松开,看电流的波动以及响应情况。

XUEXIDEXIAOhai的博客 4553

opengl之glscalse

博客园 首页 新随笔 联系 管理 订阅 随笔- 80  文章- 0  评论- 9  </div><!--end: blogStats --> </div><!--end: navigator 博客导航栏 --> OpenGL

csljl11的博客 791

从模组到集装箱:手把手拆解一个储能BMS的软硬件架构设计与通信组网

本文深入解析储能BMS的软硬件架构设计与通信组网,从电芯采样到系统集成的全链条技术实现。详细介绍了三级硬件架构(AFE、CMU、BMU)的设计要点,以及软件分层实现中的驱动层、应用层核心算法和通信协议栈。通过实战案例分享CAN网络搭建、调试工具链和系统验证测试经验,为储能系统开发提供实用指导。

weixin_30752699的博客 462

群晖NAS硬盘挂了别慌!用Ubuntu 18外接USB保姆级数据抢救指南

本文提供群晖NAS硬盘故障时的数据抢救指南,详细介绍了使用Ubuntu 18外接USB硬盘盒的完整流程。从构建救援环境、硬盘识别到数据迁移策略,涵盖关键步骤和实用技巧,帮助用户零成本恢复重要数据。特别适合非RAID配置的单盘故障场景。

9o8p7i6u5y的博客 1146

OpenGL | OpenGL矩阵操作(视图模型矩阵下)

OpenGL模型视图矩阵变换涉及的三个函数。

该用户还没想到好的昵称的博客 1959

SIMPLIS仿真软件2.2-SIMPLIS快速入门2

SIMPLIS仿真软件2.2-SIMPLIS快速入门2导读 导读 本文承接上一篇文章。开始介绍SIMPLIS仿真部分。正如上一篇所讲的快速入门的定位,该文对SIMPLIS的三种分析模式不会很深入的讲解,只会记录下一些重要的设置和操作。对于SIMPLIS的三种分析模式的详细讲解,后面会专门撰写。如果读者还没有搭建上一篇文章中讲述的电路,那你可以点击这个链接免费下载所需的电路SIMPLIS_tutorial_buck_converter ,然后在这个电路的基础上继续进行以下操作。 ...

qq_44677482的博客 2万+

图形学glTranslatef glScalef glRotated 坐标系基底向量变换的理解

距离下次区域赛还有6天,而我还在图形学摸鱼的这个事情,甚是微妙。。。。估计被人喷死了。不管了,先来整理一波图形学几个基础变换在OpenGL中的个人理解。 课没有听能够误打误撞弄对真的是非常感慨。 先记录下来的是三个函数的理解,我并不知道OpenGL底层的顺序,但是宏观上使用起来是合乎我自己的逻辑顺序的。 还有物体发生的线性变换,看成是物体所在的坐标系发生了线性变换。 glTranslatef(dx, dy, dz) 就是认为当前坐标系的原点从当前坐标系偏移到(0+dx, 0+dy, 0+dz)上 glSca

qq_43347787的博客 1987

用 XCO 库一键找出某个 ABAP 类的全部子类

ABAP XCO库子类枚举技术解析 本文介绍了在ABAP项目中如何利用XCO库高效获取类的继承层次结构。传统方法使用CL_ABAP_CLASSDESCR或手动维护映射表存在效率低、易遗漏的问题。新方法通过XCO库的IF_XCO_AO_CLASS接口,可简洁地获取父类的所有子类(包括间接子类)。 核心API链式调用: 获取类句柄:xco_cp_abap=>class() 导航子类集合:subclasses->all 获取结果:get()返回类引用表或get_names()返回类名列表 典型应用场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 127

微信小程序、H5微信公众号网页JSAPI:解决报错requestMerchantTransfer:fail:internal error(使用wx.requestMerchantTransfer错误)

如何解决requestMerchantTransfer:fail:internal error,微信小程序wx.requestMerchantTransfer报错,微信公众号H5网页使用jssdk调用wx.requestMerchantTransfer报错,JSAPI调起用户确认收款报错errMsg:“requestMerchantTransfer:fail:internal error“,微信小程序/H5 调起确认收款界面,JSAPI调起用户确认收款,微信公众号(H5),用户发起提现,商家转账给用户,用户

✅ 精选推荐文章 4964

OpenGL中的平移旋转缩放

1.opengl中缩放使用的函数是glScalef    其原型为void glScalef(GLfloat  x,  GLfloat  y,  GLfloat  z); 该函数表示模型在各轴上进行扩大和缩小。例如:glScalef (1.0, 2.0, 1.0); 表示y坐标值扩大两倍,这样原本的物体就变长了。        glTranslatef(-50.0f,0.0f,

留恋凡间事 5248

Qt版Dalsa线扫相机的采集Demo

Qt Dalsa

追赶时代的博客 604

OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用

1.gluLookAt()——视图变换函数 把自己的眼睛当成是照相机,前三个参数表示眼睛的坐标,中间三个参数表示要拍照的物体的中心位置,可以理解成焦点吧, 后三个参数表示头顶的朝向,比如说头可以歪着(哈哈)。但是我测试过,如果歪的不对,原来的正前方现在已经不是正前方 了,那么就看不见物体了。举个例子: gluLookAt (0.0, 0.0, 2.0, 0.

goodgirl_Ly的专栏 1528

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的比较

1.gluLookAt()——视图变换函数 把自己的眼睛当成是照相机,前三个参数表示眼睛的坐标,中间三个参数表示要拍照的物体的中心位置,可以理解成焦点吧, 后三个参数表示头顶的朝向,比如说头可以歪着(哈哈)。但是我测试过,如果歪的不对,原来的正前方现在已经不是正前方 了,那么就看不见物体了。举个例子: gluLookAt (0.0, 0.0, 2.0, 0.0, 0

qq_33663749的博客 711

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【转】OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用

原文地址:http://www.cnblogs.com/lihuiyy/archive/2011/11/10/2244317.html OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用 1.gluLookAt()——视图变换函数 把

循序渐进,可收宏效 2710

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspe

转载自http://www.cnblogs.com/lihuiyy/archive/2011/11/10/2244317.html 1.gluLookAt()——视图变换函数 把自己的眼睛当成是照相机,前三个参数表示眼睛的坐标,中间三个参数表示要拍照的物体的中心位置,可以理解成焦点吧, 后三个参数表示头顶的朝向,比如说头可以歪着(哈哈)。但是我测试过,如果歪的不对,原来的正前方现在已经...

手上有剑,心中有爱 252

OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用...

1.gluLookAt()——视图变换函数 把自己的眼睛当成是照相机,前三个参数表示眼睛的坐标,中间三个参数表示要拍照的物体的中心位置,可以理解成焦点吧, 后三个参数表示头顶的朝向,比如说头可以歪着(哈哈)。但是我测试过,如果歪的不对,原来的正前方现在已经不是正前方 了,那么就看不见物体了。举个例子: gluLookAt (0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0...

weixin_34161083的博客 598

OpenGL

1、glPushMatrix() 与glPopMatrix() 作用 相当于栈里的入栈和出栈。可以理解为恢复坐标位置功能。 当你做了一些旋转和变换之后,使用glPushMatrix() ,就把这个位置保存下来了,然后再做一些旋转和变换之后,使用glPopMatrix(). 就回到了刚才那个位置。 例子: 2、glDisable()和glEnable() 功能:关闭和开启服务端GL功能* 3、...

qq_40309670的博客 294

关于OpenGL模型视图矩阵的研究

在OpenGL中,矩阵的逻辑形式: 在模型视图矩阵中使用列向量来表示转换后的坐标系, 使用右乘列向量来完成对点的变换。 在OpenGL中,矩阵的物理形式: 使用连续的储存单元储存一列,(即v[0],v[1],v[2]表示m11,m21,m31) 我们可以“错误”地认为OpenGL矩阵的逻辑形式为行向量,并且“错误”地认为物理方式为连续单元保存一行。 这样经过两次错误地认为,

donger_soft的专栏 4081
上一篇: opengl中gl、glu、glut的区别
下一篇: java面向对象之类、属性、方法
code_AC
博客等级 码龄12年 255粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值