小编Ell*_*ott的帖子

曼哈顿六角形网格中瓷砖之间的距离

对于正方形网格,图块A和B之间的欧氏距离为:

distance = sqrt(sqr(x1-x2)) + sqr(y1-y2))
Run Code Online (Sandbox Code Playgroud)

对于被限制沿着正方形网格移动的演员,曼哈顿距离是我们必须行进的实际距离的更好度量:

manhattanDistance = abs(x1-x2) + abs(y1-y2))
Run Code Online (Sandbox Code Playgroud)

如何在六边形网格中获得两个瓷砖之间的曼哈顿距离,如下面的红色和蓝色线所示?

在此输入图像描述

algorithm distance path hexagonal-tiles

21
推荐指数
1
解决办法
1万
查看次数

在QGLWidget上使用QPainter时,启用抗锯齿需要哪些步骤?

我试图在QGLWidget上绘制基本形状.我试图启用抗锯齿来平滑线条,但它不起作用.

这就是我现在正在尝试的:

QGLWidget *widget = ui->renderWidget;

QPainter painter;

widget->makeCurrent();
glEnable(GL_MULTISAMPLE);
glEnable(GL_LINE_SMOOTH);

painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::HighQualityAntialiasing);

painter.begin(widget);
Run Code Online (Sandbox Code Playgroud)

然而,用这个画家绘制的任何东西仍然有锯齿状的边缘.我还需要做什么?

opengl qt

13
推荐指数
3
解决办法
1万
查看次数

在OpenGL ES 2.0中为数组索引提供整数?

我正在为iPhone开发一个OpenGL应用程序.在我的顶点着色器中,我需要一种方法来同时更改大量(但不是全部)顶点的颜色,因此我选择了颜色索引.这将允许我保持VBO静态,并修改单个统一变量,而不是循环遍历每个顶点并修改每个帧之间的颜色信息.

我的计划是使用颜色数组创建一个制服,在属性中添加一个包含索引的整数.这是我的顶点着色器:

uniform mat4 u_mvp_matrix;
uniform vec4 u_color_array[];

attribute vec4 a_position;
attribute int a_colorIndex;

varying lowp vec4 v_color;

void main()
{
    v_color = u_color_array[a_colorIndex];

    gl_Position = u_mvp_matrix * a_position;
}
Run Code Online (Sandbox Code Playgroud)

这引发了一个错误:

int不能是顶点着色器中的in

我做了一些研究.iPhone最迟支持OpenGL ES 2.0,这意味着它最迟支持GLSL 1.2,显然只有GLSL 1.3及更高版本才支持整数.我尝试将a_colorIndex更改为float.我没想到它会起作用,但事实并非如此.

如何为每个顶点指定颜色索引?

opengl-es glsl

6
推荐指数
1
解决办法
4929
查看次数

我是否必须“使用”一个特征才能调用该特征中定义的方法?

我在玩 cgmath库。我有以下 main.rs 文件:

extern crate cgmath;

use cgmath::vector::{Vector3, EuclideanVector};

fn main() {
    let mypoint = Vector3 { x: 1f64, y: 1f64, z: 3f64 };

    println!("The length of the vector is {}, and the length squared is {}", mypoint.length(), mypoint.length2());
}
Run Code Online (Sandbox Code Playgroud)

在我的 use 行中,当我省略 时EuclideanVector,会出现以下编译错误:

extern crate cgmath;

use cgmath::vector::{Vector3, EuclideanVector};

fn main() {
    let mypoint = Vector3 { x: 1f64, y: 1f64, z: 3f64 };

    println!("The length of the vector is {}, and the length …
Run Code Online (Sandbox Code Playgroud)

rust

4
推荐指数
1
解决办法
1672
查看次数

在现代 GLSL 中如何将定向光转换为屏幕坐标?

我正在将我的着色器从依赖 OpenGL 固定功能管道中切换出来。以前,OpenGL 自动为我转换灯光,但现在我需要自己做。

我的顶点着色器中有以下 GLSL 代码:

//compute all of the light vectors. we want normalized vectors 
//from the vertex towards the light
for(int i=0;i < NUM_LIGHTS; i++)
{
    //if w is 0, it's a directional light, it is a vector 
    //pointing from the world towards the light source
    if(u_lightPos[i].w == 0)
    {
        vec3 transformedLight = normalize(vec3(??? * u_lightPos[i]));
        v_lightDir[i] = transformedLight;
    }
    else
    {
        //this is a positional light, transform it by the view*projection matrix
        vec4 transformedLight = u_vp_matrix …
Run Code Online (Sandbox Code Playgroud)

opengl glsl

2
推荐指数
1
解决办法
2247
查看次数

检查X是否是Y的倍数,其中Y可以为零

我有两个数字,X和Y,我想断言X是Y的倍数 - 即,我想断言存在一些任意整数n,使得Y*n == X.

如果Y保证大于零,我可以写

assert!(x % y == 0)
Run Code Online (Sandbox Code Playgroud)

但就我而言,Y可能为零.如果Y为零,那么X也必须为零,所以我可以写

if y == 0 {
    assert!(x == 0);
} else {
    assert!(x % y == 0);
}
Run Code Online (Sandbox Code Playgroud)

但这是5行长,并且与assert的单个分支有两个分支.是否可以以优雅的方式在一行中完成此操作?

rust

1
推荐指数
1
解决办法
158
查看次数

标签 统计

glsl ×2

opengl ×2

rust ×2

algorithm ×1

distance ×1

hexagonal-tiles ×1

opengl-es ×1

path ×1

qt ×1