- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
最近才知道树莓派的GPU只支持OpenGL ES。我有一个任务要完成,问题是,每当我搜索 OpenGL ES 时,我都会得到基于 Android 和 IOS 的结果。
谢天谢地,我只有一个小问题。我偶然发现了 simple2d 库,它抽象了 OpenGL ES 与 pi 上的视频核心 IV GPU 的接口(interface)。它是一个开源库,似乎不支持旋转纹理。这是我想要清除所有障碍的唯一功能。这是对 DrawTextures 的调用。我将非常感谢任何帮助我解决这个问题的人。
static void S2D_GLES_DrawTexture(int x, int y, int w, int h,
GLfloat r, GLfloat g, GLfloat b, GLfloat a,
GLfloat tx1, GLfloat ty1, GLfloat tx2, GLfloat ty2,
GLfloat tx3, GLfloat ty3, GLfloat tx4, GLfloat ty4,
GLuint texture_id) {
GLfloat vertices[] =
// x, y coords | x, y texture coords
{ x, y, 0.f, tx1, ty1,
x + w, y, 0.f, tx2, ty2,
x + w, y + h, 0.f, tx3, ty3,
x, y + h, 0.f, tx4, ty4 };
GLfloat colors[] =
{ r, g, b, a,
r, g, b, a,
r, g, b, a,
r, g, b, a };
glUseProgram(texShaderProgram);
// Load the vertex position
glVertexAttribPointer(texPositionLocation, 3, GL_FLOAT, GL_FALSE,
5 * sizeof(GLfloat), vertices);
glEnableVertexAttribArray(texPositionLocation);
// Load the colors
glVertexAttribPointer(texColorLocation, 4, GL_FLOAT, GL_FALSE, 0, colors);
glEnableVertexAttribArray(texColorLocation);
// Load the texture coordinate
glVertexAttribPointer(texCoordLocation, 2, GL_FLOAT, GL_FALSE,
5 * sizeof(GLfloat), &vertices[3]);
glEnableVertexAttribArray(texCoordLocation);
// Bind the texture
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture_id);
// Set the sampler texture unit to 0
glUniform1i(samplerLocation, 0);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
}
我的任务是修改上面的函数,让它接受额外的旋转参数,以便在绘制纹理之前旋转它。
我了解 OpenGL,而且我很确定调用 Rotatef 不会有帮助。如果有人能告诉我如何在适用于 Pi 的 OpenGL ES 中执行此操作,我会很高兴。
最佳答案
你必须设置一个旋转矩阵。根据您的需要,在顶点着色器中通过旋转矩阵变换顶点坐标或纹理坐标。
像这样创建一个顶点着色器:
attribute vec3 texPosition;
....
uniform mat4 u_rotateMat44;
void main()
{
....
vec4 rotPos = u_rotateMat44 * vec4(texPosition, 1.0);
gl_Position = rotPos;
}
或者这个:
attribute vec2 texCoord;
....
varying vec2 outTexCoord:
uniform mat4 u_rotateMat44;
void main()
{
....
vec4 rotCoord = u_rotateMat44 * vec4(texCoord, 0.0, 1.0);
outTexCoord = rotCoord.st;
....
}
旋转矩阵可以这样设置:
#include <math.h> // sin, cos
float ang_rad ....; // angle in radians
float rotMat[16] =
{
cos(ang_rad), sin(ang_rad), 0.0f, 0.0f,
-sin(ang_rad), cos(ang_rad ), 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
通过 glUniformMatrix4fv
设置制服:
GLuint program = ....; // the shader program
GLint rotMatLoc = glGetUniformLocation( program, "u_rotateMat44" );
glUniformMatrix4fv( rotMatLoc, 1, GL_FALSE, rotMat );
关于c++ - 如何在 Pi 上使用 OpenGL ES 在绘制到屏幕之前旋转纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48961265/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在使用带有Grove Pi +(1.2.2固件)的Raspberry Pi 3 B模型和用于Robots Image的Raspbian。 我在I2C-1端口中插入了多 channel 气体传感器,
这看起来非常简单,但我似乎无法弄清楚如何将 -Pi 和 Pi 之间的角度映射到 0 到 2Pi 的范围内。我尝试使用 np.select 但由于某种原因它卡住了我的程序。我需要这个范围内的角度,因为它
在使用 SciPy 和 NumPy 的项目中,我应该使用 scipy.pi , numpy.pi , 或 math.pi ? 最佳答案 >>> import math >>> import numpy
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我有一个运行 Raspbian 的 Raspberry Pi 1。我尝试在 Raspberry Pi 3 上运行 SD 卡,但它没有启动。 我已经阅读了有关升级 Raspberry Pi 2 安装以在
#include using namespace std; #define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #d
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我目前正在尝试RadiusNetworks发布的Raspberry Pi iBeacon教程,网址为 http://developer.radiusnetworks.com/2013/10/09/ho
我无法在运行Raspbian的Raspberry Pi 3上安装我创建的 Electron 应用程序。我已经使用了electronic-packager来创建软件包,然后创建了一个debian安装程序
我想在Linux上为Raspberry Pi 1设置交叉编译环境。 特别是我想尝试最新版本,即Raspbian测试+ Qt5开发分支。 这个问题: How can I create a modern
我想要从我的 Raspberry Pi Zero 到手机的低延迟流式传输。据我了解,移动浏览器不支持 RTMP 流式传输,HLS 流式传输具有高延迟,而 webRTC 是我最好的选择。 有谁知道从零开
我的公司使用 Raspberry Pi 3 作为产品中的嵌入式 Controller 。用户不会优雅地关闭它,他们只是扳动一个开关。为避免损坏,/boot 和/root 文件系统是只读的。这似乎是防弹
如何使用 Raspberry Pi 作为 b/w USB Tethered 手机和路由器的桥接器,使用“以太网电缆 b/w Raspberry Pi 和路由器”和“USB 电缆 b/w 手机和 Ras
我正在尝试在Raspberry Pi 3上安装Rakudo Star 2018.04。 我做: sudo perl Configure.pl --gen-moar --gen-nqp --prefix
我正在寻找一些可以有效完成的不错的 C 代码: while (deltaPhase >= M_PI) deltaPhase -= M_TWOPI; while (deltaPhase T Mod(T
我正在尝试为 raspberry Pi 构建跨环境以在 Eclipse CDT for windows 上构建二进制文件。 我得到了用于访问 GPIO 的 Wiring Pi,我需要使用“Window
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我正在寻找一些可以有效完成的不错的 C 代码: while (deltaPhase >= M_PI) deltaPhase -= M_TWOPI; while (deltaPhase T Mod(T
这个问题在这里已经有了答案: C: How to wrap a float to the interval [-pi, pi) (15 个答案) 关闭 9 年前。 我想知道是否可以定义一个只能取 -
我是一名优秀的程序员,十分优秀!