- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试实现一个简单的渲染管理器。另一个类提供了一个表示四边形的结构,并将其复制到渲染管理器中的顶点数组缓冲区中。
但是复制似乎不起作用,当我手动创建一个结构并将其复制到顶点数组时,一切都很好并且可以呈现。但是在副本的某个地方,一切都出错了。我可以使用 gdb 看到这一点(值不同),但我无法弄清楚发生了什么。
RenderManager 方法
-(id)init
{
if([super init]){
iva = calloc(MAX_QUADS, sizeof(quad));
quad draw = {
0.0f,0.0f,0.0f, 0.0f,0.0f,1.0f, //Bottom left
1.0f,0.0f,0.0f, 0.0f,0.0f,1.0f, //Top Left
1.0f,1.0f,0.0f, 0.0f,0.0f,1.0f, //Top Right
0.0f,1.0f,0.0f, 0.0f,0.0f,1.0f, //Bottom Right
0.5f,0.5f,0.0f, 0.0f,0.0f,1.0f, //Center
};
如果我将其注释掉,则没有任何内容。使用它,我得到了我期待的漂亮四边形
memcpy(iva, &draw, sizeof(draw));
. . . OpenGl methods
//Add the quad details to the render queue
-(void)addDetailsToRenderQueue:(quad *)details
{
if(iva == NULL)
NSLog(@"Error claiming memory, something is very wrong");
if(renderCount + 1 > MAX_QUADS){
NSLog(@"Render buffer full, dumping...");
[self render];
}
memcpy((quad *)iva + renderCount++, &details, sizeof(quad));
}
//Render the details in the render queue, for each quad we need to make two triangles.
-(void)render
{
int counter = 0;
renderCount *= 5;
for(int i;i < renderCount;){
ivaIndices[counter++] = i + 0; // Bottom left
ivaIndices[counter++] = i + 1; //Top Left
ivaIndices[counter++] = i + 4; //Center
ivaIndices[counter++] = i + 1; //Top Left
ivaIndices[counter++] = i + 2; //Top right
ivaIndices[counter++] = i + 4; //Center
ivaIndices[counter++] = i + 2; //Top right
ivaIndices[counter++] = i + 3; //Bottom right
ivaIndices[counter++] = i + 4; //Center
ivaIndices[counter++] = i + 3; //Bottom right
ivaIndices[counter++] = i + 0; //Bottom Left
ivaIndices[counter++] = i + 4; //Center
i += 5;
}
glBindVertexArrayOES(_vertexArray);
glDrawElements(GL_LINE_STRIP,12, GL_UNSIGNED_SHORT, ivaIndices);
// Reset the number of quads which need to be rendered
renderCount = 0;
}
图 block 管理器方法
@interface TileSet : NSObject
{
quad *tiles;
NSUInteger tileCount;
RenderManager *sharedRenderManager;
}
-(id)init
{
if([super init]){
tiles = calloc(MAX_HEIGHT * MAX_WIDTH, sizeof(quad));
tileCount = 0;
sharedRenderManager = [RenderManager sharedManager];
}
[self fillArray];
return self;
}
-(void)fillArray
{
int rows = 4;
int columns = 12;
for(int i = 0; i < rows;i += 2) {
for(int j = 0;j < columns;j += 2) {
quad tmp;
tmp.v1.x = i;
tmp.v1.y = j;
tmp.v1.z = 0.0f;
tmp.v1.nx = 0.0f;
tmp.v1.ny = 0.0f;
tmp.v1.nz = 1.0f;
tmp.v2.x = i + 1;
tmp.v2.y = j;
tmp.v2.z = 0.0f;
tmp.v2.nx = 0.0f;
tmp.v2.ny = 0.0f;
tmp.v2.nz = 1.0f;
tmp.v3.x = i;
tmp.v3.y = j+1;
tmp.v3.z = 0.0f;
tmp.v3.nx = 0.0f;
tmp.v3.ny = 0.0f;
tmp.v3.nz = 1.0f;
tmp.v4.x = i + 1;
tmp.v4.y = j+1;
tmp.v4.z = 0.0f;
tmp.v4.nx = 0.0f;
tmp.v4.ny = 0.0f;
tmp.v4.nz = 1.0f;
tmp.v5.x = i + 0.5;
tmp.v5.y = j + 0.5;
tmp.v5.z = 0.0f;
tmp.v5.nx = 0.0f;
tmp.v5.ny = 0.0f;
tmp.v5.nz = 1.0f;
memcpy((quad *)tiles + (i*j + j), &tmp, sizeof(quad));
tileCount++;
}
}
}
//Draw the tiles in the tileset, loop through and add to renderManagers queue
-(void)render
{
for(int i = 0; i < tileCount;i++)
[sharedRenderManager addDetailsToRenderQueue:&tiles[0]];
}
编辑在回答问题时,添加
NSLog(@"Tiles:%x\tDisgusting pointer math:%x",tiles,(quad *)tiles + (i*j + j));
给出结果
2011-10-21 21:29:21.456 TerrainRendering[11293:fb03] Tiles:7316200 Disgusting pointer math:7316200
2011-10-21 21:29:21.458 TerrainRendering[11293:fb03] Tiles:7316200 Disgusting pointer math:73162f0
2011-10-21 21:29:21.463 TerrainRendering[11293:fb03] Tiles:7316200 Disgusting pointer math:73163e0
2011-10-21 21:29:21.464 TerrainRendering[11293:fb03] Tiles:7316200 Disgusting pointer math:73164d0
2011-10-21 21:29:21.465 TerrainRendering[11293:fb03] Tiles:7316200 Disgusting pointer math:73165c0
2011-10-21 21:29:21.465 TerrainRendering[11293:fb03] Tiles:7316200 Disgusting pointer math:7316200
2011-10-21 21:29:21.466 TerrainRendering[11293:fb03] Tiles:7316200 Disgusting pointer math:73164d0
2011-10-21 21:29:21.467 TerrainRendering[11293:fb03] Tiles:7316200 Disgusting pointer math:73167a0
2011-10-21 21:29:21.470 TerrainRendering[11293:fb03] Tiles:7316200 Disgusting pointer math:7316a70
2011-10-21 21:29:21.470 TerrainRendering[11293:fb03] Tiles:7316200 Disgusting pointer math:7316d40
最佳答案
您在 memcpy 中的偏移量应为 (i*MAX_HEIGHT + j)
。您想要使用“i”(外循环)跳转行并使用“j”(内循环)依次深入研究它们。
希望对你有帮助
关于objective-c - 指针和opengl绘图的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7854284/
我正在尝试编写一个函数来制作绘图并将其自动保存到文件中。 我努力用它来动态地做的技巧[plotname=varname & filename=varname &], 并使其与从循环中调用它兼容。 #
有人可以帮助我如何在绘图条形图中添加“下拉”菜单。 我在以下链接 ( https://plot.ly/python/v3/dropdowns/ ) 上找到了一些信息,但我正在努力调整代码,因此下拉选项
我不确切知道如何表达这一点,但我本质上希望根据其他数据之前的列值将数据分组为 Excel 图的系列。例如: size weight apple 3 35 orange 4
我正在为出版物创建图表并希望它们具有相同的字体大小。 当我用多图创建图形时,字体大小会减小,即使我没有更改tiff() 分辨率或pointsize 参数。我根据最终适合的地 block 数量增加了图形
我用 glm::perspective(80.0f, 4.0f/3.0f, 1.0f, 120.0f);并乘以 glm::mat4 view = glm::lookAt( glm::vec3(
我在 Shiny UI 中有一个情节。如果我更改任何输入参数并且通过 react 性图将会改变。但是让我们考虑以下情况:- Shiny UI 中的绘图可以说股票的日内价格变动。为此,您查询一些实时数据
我对 R 有点陌生。我在以下两个线程中跟踪并实现了结果: http://tolstoy.newcastle.edu.au/R/e17/help/12/03/7984.html http://lukem
我想在 WPF 控件中使用 GDI+ 绘图。 最佳答案 有多种方法可以做到这一点,最简单的方法是锁定您使用 GDI 操作的位图,获取像素缓冲区(从锁定中获取的 BitmapData 中的 Scan0
如何在以下取自其网站的绘图示例中隐藏颜色条? df % layout(title = '2014 Global GDPSource:CIA World Factbook',
我有两列数据,X 和 Y,每个条目在两个向量的小数点后都有 4 位数据。 当我使用 plot(x,y) 绘制简单图时,轴上显示的数据精确到小数点后两位。如何在两个轴上将其更改为小数点后 4 位精度?
我目前正在使用 Canvas 处理 JavaFX-Drawing-Application。在 GraphicsContext 的帮助下,我使用 beginPath() 和 lineTo() 方法绘制线
如果这个问题已经得到解答,但我无法找到我需要的东西,我提前道歉。我想从名为 data1.dat、data2.dat 的文件中绘制一些结果......我设法通过循环导入数据,但我无法使用循环绘制结果。仅
我的 pandas 数据框中有一个功能,可以(可能)具有多个级别。我可以使用以下方法获得独特的级别: reasons = df["Reason"].unique() 我可以通过执行以下操作在单个图表上
我在 Ubuntu 14 和 Windows 7(均为 64 位)中用 Python 绘制结果时遇到问题。作为一个简单的比较,我做了: from tvb.simulator.lab import *
以下代码相当简单 - 它用随机选择的像素填充设计表面 - 没什么特别的(暂时忽略第二种方法中的 XXXXXXX)。 private void PaintBackground() { Rando
我正在尝试制作一个绘制函数图形的 swing 应用程序(现在很简单,例如 x+2)但我在根据屏幕坐标制作我的点的数学坐标时遇到问题。我希望它在我的图表中简单地画一条从 P1(0,1) 到 P2(1,2
编辑 4:问题的新格式 背景:我有一个扩展 JFrame 的类 Window,在 JFrame 中我有一个 Canvas 。我向 Canvas 添加自定义对象。这个对象的唯一目的(为了争论)是在 Ca
我需要为即将到来的锦标赛标记阶梯,但我找不到任何方法来语义标记它。到目前为止我看到的唯一方法是 mark it up as a table ,我想不惜一切代价避免这种情况。 有什么想法吗? 最佳答案
我目前正在为一个小型 uC 项目编写 UI。在计算垂直线的位置时遇到一些问题。这个想法是将红线沿 x 轴移动到矩形的末端。 使用无限旋转编码器递增的值,范围为 0 到 800,增量为 1。矩形的左侧是
我正在尝试绘制光分布图。我想准确地执行此问题的第一步所要求的:Statistical analysis on Bell shaped (Gaussian) curve . 现在我有一组值。我希望数组元
我是一名优秀的程序员,十分优秀!