小编Pie*_*ice的帖子

奇怪的行为更新精灵位置

我正在使用SDL库在C++中编写一个简单的roguelike游戏,我在屏幕上移动我的角色时遇到了一些问题.每次需要渲染帧时,我都会使用update()函数更新精灵的位置,如果玩家静止不动,则不会执行任何操作.为了发出移动命令,从而开始动画,我使用每个玩家从一个瓦片移动到另一个瓦片时只调用一次的step()函数.在接收到"向上"命令时,游戏表现良好并且角色在一秒内平稳地移动到新位置.然而,当给出"向下"命令时,他以大约一半的速度移动,并且显然在经过一秒之后,他立即被"传送"到最终位置,突然闪烁.移动的代码基本相同,但是在一种情况下,delta移动被加到y位置,在另一种情况下被减去.也许这个位置是一个整数并且delta是一个双倍的事实会导致问题?sum和subract的行为是否不同(可能是不同的舍入)?这是相关的代码(抱歉长度):

void Player::step(Player::Direction dir)
{
    if(m_status != STANDING) // no animation while standing
        return;

    switch(dir)
    {
    case UP:
        if(m_currMap->tileAt(m_xPos, m_yPos - m_currMap->tileHeight())->m_type == Tile::FLOOR)
        {
            // if  next tile is not a wall, set up animation
            m_status = WALKING_UP;
            m_yDelta = m_currMap->tileHeight(); // sprite have to move by a tile
            m_yVel = m_currMap->tileHeight() / 1000.0f; // in one second
            m_yNext = m_yPos - m_currMap->tileHeight(); // store final destination
        }
        break;
    case DOWN:
        if(m_currMap->tileAt(m_xPos, m_yPos + m_currMap->tileHeight())->m_type == Tile::FLOOR)
        {
            m_status …
Run Code Online (Sandbox Code Playgroud)

c++ sdl

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

OpenGL点在片段着色器中精灵旋转

我正在学习本教程,以了解更多关于OpenGL,特别是点精灵的内容.但是我坚持在页面末尾的一个练习中:

尝试通过更改片段着色器将点精灵旋转45度.

在本章中以及之前的章节中没有关于此类事情的提示.我没有找到任何关于如何做的文档.这些是我的顶点和片段着色器:

顶点着色器

#version 140

attribute vec2 coord2d;

varying vec4 f_color;

uniform float offset_x;
uniform float scale_x;
uniform float point_size;

void main(void) {
    gl_Position = vec4((coord2d.x + offset_x) * scale_x, coord2d.y, 0.0, 1.0);
    f_color = vec4(coord2d.xy / 2.0 + 0.5, 1.0, 1.0);
    gl_PointSize = point_size;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器

#version 140

varying vec4 f_color;

uniform sampler2D texture;

void main(void) {
    gl_FragColor = texture2D(texture, gl_PointCoord) * f_color;
}
Run Code Online (Sandbox Code Playgroud)

我想在FS中使用2x2矩阵来旋转gl_PointCoord,但我不知道如何填充矩阵来完成它.我应该把它作为制服直接传递给FS吗?

c++ opengl glsl

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

在Qt中绘制一条多色线

我想要实现的目标如下:我有QGraphicsScene一个QGraphicsPixmapItem显示在其中.像素图有多种颜色,我需要在像素图上绘制一条线,必须在每个点上都可见并且可识别.

我的想法是绘制一条线,其中每个像素都具有像素图的相对像素的负(互补)颜色.所以我想到了子类化QGraphicsItem和重新实现paint()方法来绘制一条多色线.

但是我被卡住了,因为我不知道如何从paint函数中检索像素图的像素信息,即使我发现了,我也想不出以这种方式画线的方法.

你能给我一些关于如何进行的建议吗?

qt qgraphicsitem

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

标签 统计

c++ ×2

glsl ×1

opengl ×1

qgraphicsitem ×1

qt ×1

sdl ×1