接收SFML TCP数据包
我将数据包作为客户端发送到服务器,我想向服务器发送该数据包转发给所有客户端,以下是代码: #include #include using namespace std; int main() { int fromID; // receive data from 'fromID' int Message; // fromID's message sf::SocketTCP Listener; if (!Listener.Listen(4567)) return 1; // Create a selector for handling several sockets (the listener + the socket associated to each client) sf::SelectorTCP Selector; Selector.Add(Listener); while (true) { uns
6 2023-05-16
编程技术问答社区
基于观察方向的OpenGL照明变化
aka我在做什么错? 我一直在用OpenGL弄乱,现在我只是想在点燃立方体.我不确定我是否理解我应该做的正确的事情,因为当我四处移动相机时,立方体上的照明会发生变化. 例如: 从上到下查看立方体: 从侧面看一下立方体: 从我看到的所有答案中搜索时,当正常设置未正确设置时,就会发生这种情况,但我认为它们是正确设置的,因为当我打印出所有的顶点及其正态时, ,这是结果(面部按绘制顺序分组): Position: 0 0 0 Normal: -1 0 0 Position: 0 30 0 Normal: -1 0 0 Position: 0 30 30 Normal: -1 0 0 Position: 0 0 30 Normal: -1 0 0 Position: 0 0 0 Normal: 0 1 0 Position: 0 0
0 2023-05-10
编程技术问答社区
Visual Studio SFML链接器错误
我是SFML的新手,当我尝试编译基本程序时,我会得到此错误 错误2错误lnk2019:未解决的外部符号" __declspec(dllimport)void> __ cdecl sf :: Sleep(class sf :: time)函数_main C:\ users \ asd \ documents \ Visual Studio 2013 \ Projects \ openGl \ OpenGl \ openGl \ source.obj OpenGL 这是代码: #include #define SFML_STATIC int main() { sf::sleep(sf::seconds(1.f)); return 0; } 我还链接了sfml-windows-s.lib和sfml-system-s.lib 解决方案 我必须将sfml_static定义为预处理器,而不是在代码内部.
0 2023-05-10
编程技术问答社区
使着色器将顶点阵列作为画布,而不是窗口。
目前正在开发基于GUI SFML的开源库,但在着色器中有点挣扎.到现在为止 这是我的简单代码: #include #include #include const char *glsl = R"( #version 330 core uniform vec2 u_resolution; void main() { vec2 pos = gl_FragCoord.xy / u_resolution; float radius = 0.4; float d = distance(pos, vec2(0.5)); gl_FragColor = d
0 2023-05-10
编程技术问答社区
OpenGL-对象转换和VBOs
因此,我已经编写了一个程序,该程序使用顶点缓冲物对象呈现网格,并让我将相机移动.我现在想使对象独立于相机/视图. 但是,我不确定如何将网眼移动到太空中.谷歌搜索倾向于找到来源告诉我用glrotatef()等旋转对象,或者使用glrotatef()及其兄弟姐妹是一个坏主意,因为它们被弃用了.也许我没有使用正确的搜索术语,但是我发现这似乎是一个不错的起点.我看到对矩阵数学的模糊引用,但我不知道如何使用它以及采用什么方法.其他消息来源说,我应该应用一个顶点着色器来转换对象. 我想我可以在每个帧中手动重建网格,但这似乎是一个可怕的主意(网格经常有50k的三角形以上,我至少想拥有数十个)如果已经存储在VBO中,则确实需要在我的其余内存中不断使用顶点...对吗? 那么,我该如何独立于全球空间来操纵存储在VBO中的网格?我应该在学习中使用什么资源? 解决方案 您应该使用模型视图矩阵将转换应用于顶点.要将转换应用于特定的对象/网格,而不是在整个屏幕上,请将模型视图矩阵的副本推入
0 2023-05-10
编程技术问答社区
学习正确使用VBO
因此,我一直在试图教自己使用VBO,以提高我的OpenGL项目的性能并学习比固定功能渲染更多的高级内容.但是我没有发现很多不错的教程.到目前为止,我发现的最好的是 songho的教程 =" http://www.opengl.org/wiki/wiki/vertex_buffer_object" rel =" noreferrer"> openggl.org ,但是我似乎缺少某种背景知识来完全了解发生了什么,尽管我我正在发生什么,尽管我无法确切说明我没有得到什么,保存几个参数的用法. 无论如何,我一直在提前锻造,并提出了一些杂种代码,至少没有崩溃,但会导致奇异的结果.我想渲染的是(使用固定功能呈现;它应该是棕色和背景灰色,但是我所有的OpenGL屏幕截图似乎都采用洋红色作为他们最喜欢的颜色;也许是因为我在窗口上使用sfml?). 我得到的是: 我很茫然.这是我使用的相关代码,首先是用于设置缓冲对象(我按GLuint WorldBuffer; GLuint IndexBu
8 2023-05-10
编程技术问答社区
OpenGL的旋转--本地轴与全局轴
所以我有一个对象,相对于对象自己的本地轴而不是全球空间的轴,我正在尝试根据偏航,俯仰和滚动方案进行旋转.根据 this ,我需要执行旋转以该顺序.我已经解释了这一点: glRotatef(m_Rotation.y, 0.0, 1.0, 0.0); glRotatef(m_Rotation.z, 0.0, 0.0, 1.0); glRotatef(m_Rotation.x, 1.0, 0.0, 0.0); 但是,围绕Y和Z轴的旋转行为不起作用.围绕Y轴的旋转始终相对于全球空间,围绕X轴旋转的Z轴作品为0,但否则会弄乱. 可以肯定的是,我也尝试了反向顺序,但这也不起作用.我认为我也尝试了所有其他订单,因此问题必须是其他订单.可能是吗? 这就是我获得旋转的方式: ///ROTATIONS sf::Vector3 Rotation; Rotation.x = 0; Rotation.y = 0; Rotation.
0 2023-05-10
编程技术问答社区
不能让深度测试在OpenGL中工作
我使用 sfml 创建窗口. 在此屏幕截图中,立方体应该在金字塔后面,但它不起作用. 这是我使用的最小代码: #include #include #include #include "ResourcePath.hpp" void resize(); void drawScene(); void initGL(); float rtri = 0; float rquad = 0; float z = -10.0f; int main (int argc, const char * argv[]) { // Create the main window sf::RenderWindow *window = new sf::RenderWindow(); window->Create( sf::VideoMode( 800, 600, 32 ), "
0 2023-05-10
编程技术问答社区
#error gl.h包含在glew.h之前。
因此,我试图将我的OpenGL代码从Main()移动到特定类,该类仅在必要时才处理3D图形.以前,我的amain.cpp文件的顶部看起来像这样: #define GLEW_STATIC #include #include #include #include #include #include "Game.h" 这效果很好.我试图做的是将所有与OpenGL相关的代码移动到Game类的方法中.因此,我从上面删除了#define GLEW_STATIC和#include ,然后将它们放入game.h中,使得game.h现在看起来像这样: #define GLEW_STATIC #include #include #include #include
36 2023-05-10
编程技术问答社区
替代texelFetch?
我正在进入GLSL,需要一些有关纹理查找的帮助.我正在尝试使用纹理进行存储,但我无法获得"正确的"纹理查找.我更喜欢使用通常的纹理2D方法(使用GLSL 1.2),但结果还不够好. 使用Texture2D: 使用Texelfetch: 现在显然第一个出了问题.这是我想做的(是的,除非有我不知道的东西,否则大小是正确的): vec4 texelFetch(sampler2D tex, ivec2 size, ivec2 coord) { return texture2D(tex, vec2(float(coord.x) / float(size.x), float(coord.y) / float(size.y))); } 那么,如何正确地完成? 解决方案 这已成为某种常见问题解答: 我在这里回答 https://stackoverflow.com/a/5879551/5
0 2023-05-10
编程技术问答社区
初始化GLEW失败。缺少GL版本
我尝试使用最新版本的QT Creator设置SFML 2.0,我已经正确设置了SFML,并且我导入了在Visual Studio中写的一款小型游戏.汇编后,我明白了: 我尝试的是 重新安装整个QT SDK和QT创建者IDE 重新安装SFML 重新安装mingw 我试图编写一个简单的程序来确保它不是我的代码,而是该程序正确编译,但是当我关闭应用程序时,我会得到不正常的OpenGL错误 我尝试在SFML论坛上发布线程,但无济于事. 谷歌搜索错误显示了一些针对OpenGL的结果,这些结果过于本地化,它们不适用于我,对SFML 2.0中的这种情况没有答案 其他细节 我正在运行Windows XP SP3,Mingw和Qt SDK和SFML的最新版本 我正在尝试使用工程的代码,而没有任何错误甚至警告 是的,我确定SFML是在我的IDE上设置的,基本代码有效,但显示了这些错误,而更高级的代码将所有精灵和文本显示为框. 我没有编译SFML自己 我
10 2023-05-10
编程技术问答社区
使用四元数进行OpenGL旋转
因此,我正在编写一个程序,其中对象围绕太阳风格移动,以学习如何在3D空间中顺畅地移动事物.在与Euler Angles稍微弄乱了一点之后,似乎它们并不是在任意方向上自由形式的3D运动真正合适的,因此我决定继续前进,似乎最适合工作 - 季节.我打算始终绕其本地X-Y-Z轴旋转,从来都不是围绕全局X-Y-Z轴. 我试图使用四局实现旋转系统,但某些事情不起作用.当沿单个轴旋转对象时,如果没有进行以前的旋转,则事物沿给定轴旋转.但是,当进行一次旋转后进行一次旋转时,第二个旋转并不总是沿本地轴沿本地轴进行旋转 - 例如,在围绕z轴旋转约90°后,围绕y轴旋转了旋转仍然发生在全局Y轴周围,而不是与全局X轴对齐的新的本地Y轴. 嗯.因此,让我们逐步完成此.错误一定是在这里的某个地方. 步骤1-捕获输入 我认为最好使用Euler Angles(或俯仰 - 滚动方案)来捕获玩家输入.目前,箭头键控制音高和偏航,而Q和E控制滚动.我捕获播放器输入(我使用的是SFML 1.6):
2 2023-05-10
编程技术问答社区
OpenCV 2.3: 将Mat转换成RGBA像素阵列
我试图使用OpenCV从网络摄像头中获取帧并使用SFML显示在窗口中. videocapture以OpenCV的垫子格式返回帧.要显示帧,SFML需要以其UINT8格式的1D像素数组,据我所知,该格式(据我所知)与UChar可以互换.该阵列预计将代表每个像素RGBA 32位. 所以,我有一个UCHAR数组,我正在循环浏览垫子数据并复制每个像素: VideoCapture cap(0); Mat frame; cap >> frame; uchar* camData = new uchar[640*480*4]; uchar* pixelPtr = frame.data; for(int i = 0; i
8 2023-05-09
编程技术问答社区
SFML中的白色广场,雪碧和纹理存储在不同的对象中
我正在体验白色方形问题在SFML中.我正在研究使用瓷砖地图的游戏. A Game类将从文件中加载图块集作为sf ::纹理,然后在Game中的getTileById函数将"切割"从瓷砖纹理中"切掉"适当的瓷砖.例如 sf::Sprite GameScreen::getSpriteByPos(int pos, sf::Texture texture, int tileSize) { sf::IntRect subRect; subRect.left = (pos-1)*tileSize; subRect.top = (pos-1)*tileSize; subRect.width = tileSize; subRect.height = tileSize; sf::Sprite tileSprite(texture, subRect); return tileSprite; } 然后将Sprite传递到一个瓷砖对象中,然后将其
0 2023-05-09
编程技术问答社区
在一行中声明多个对象指针会导致编译器错误
当我这样做(在我的班上) public: Entity() { re_sprite_eyes = new sf::Sprite(); re_sprite_hair = new sf::Sprite(); re_sprite_body = new sf::Sprite(); } private: sf::Sprite* re_sprite_hair; sf::Sprite* re_sprite_body; sf::Sprite* re_sprite_eyes; 一切正常.但是,如果我将声明更改为此: private: sf::Sprite* re_sprite_hair, re_sprite_body, re_sprite_eyes; 我发现此编译器错误: error: no match for 'operator=' in '((Entity*)this)-
0 2023-05-08
编程技术问答社区
未解决的外部符号:LNK 2001
我刚刚使用Nuget软件包管理器安装了SFML软件包.安装后.我从其官方页面上运行了一个基本程序.只需复制和粘贴即可. #include int main() { sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); sf::CircleShape shape(100.f); shape.setFillColor(sf::Color::Green); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close();
14 2023-04-30
编程技术问答社区
类似纳戈尔的问题
所以我有这个实时游戏,使用那我该怎么办?我该如何解决?也许是服务器中的东西?也许OS设置? 要清楚:我不使用纳格尔,但我仍然有这个问题.我在客户端和服务器中都禁用. 解决方案 您必须在两个同行>中禁用纳格尔.您可能想找到一个基于记录的不同协议,例如SCTP. edit2 ,由于您要求提供协议,这是我将如何做的: 为消息定义标头.假设我会选择一个32位标题. Header: MSG Length: 16b Version: 8b Type: 8b 然后,真实消息传来,MSG Length字节. 所以现在我有了一种格式,我将如何处理事情? 服务器 当我写一条消息时,我会预处控制信息(实际上是最重要的长度)并发送整个内容.启用nodelay或不可能没有区别. 客户 我不断从服务器接收东西,对吗?所以我必须做某种read. 从服务器读取字节.任何金额都可以到达.继续阅读,直到至少有4个字节为止.
0 2023-04-22
编程技术问答社区
背景图片与主菜单项目重叠
我最近才开始学习游戏开发.我设法开发了一个简单的游戏(类似太空射击游戏)和使用C ++和SFML的简单开始菜单. (这不是作业) 问题:主菜单屏幕的背景图像与我的文本/菜单项重叠.但是游戏屏幕的背景图像不会重叠我的游戏项目. 相关代码: main.cpp int main() { //Background Image for Game Screen sf::Texture galaxyBackgroundTexture, menuBackgroundTexture; sf::Sprite galaxyBackground, menuBackground; sf::Vector2u TextureSize; //Added to store texture size. sf::Vector2u WindowSize; //Added to store window size. sf::RenderWindow win
4 2023-04-21
编程技术问答社区
在游戏中使用状态模式
最近,我尝试在SFML中创建蛇游戏.但是,我还想使用一些设计模式来养成未来编程的良好习惯 - 这是状态模式.但是 - 有一些我无法解决的问题. 为了清楚所有内容,我试图制作几个菜单 - 一个主菜单,还有其他菜单,例如"选项"或类似的东西.主菜单的第一个选项将使播放器进入"播放状态".但是,出现问题 - 我认为整个游戏应该是针对程序实现的独立模块.那么,我该如何处理哪个程序的实际状态? (例如,让我们称此状态为" mainmenu"). 我应该做一个称为" Playstate"的额外状态,它代表整个游戏?我该怎么做?如何将新功能添加到单个状态?你有什么想法吗? 解决方案 状态模式允许您具有类的对象Game的对象,并在游戏状态更改时改变其行为,以说明此Game对象已更改其类型. 举例来说,想象一下一个具有初始菜单的游戏,如果您按Space Bar,可以在玩游戏时暂停.暂停游戏时,您可以通过按下backspace键回到初始菜单,也可以再次按Space Bar继续播放:
10 2023-04-21
编程技术问答社区
SFML getGlobalBounds( ).intersect(getGlobalBounds( )not Working
我只是尝试从船形和小行星肖像中获得碰撞,但是GetGlobalbbands没什么快乐的.Im做错了什么?请帮我. 在SpaceShip.hpp中具有一个bool函数.非常奇怪,但是我需要创建任何变量以引用getglobalbounds? 我只是从SpaceShip.cpp中放置一个代码以进行澄清. Spaceship.hpp ..... class Spaceship: public sf::Drawable, public sf::Transformable { ...... public: bool shipcollisionAsteroid(sf::ConvexShape shapeship, sf::ConvexShape shape); ....... ....... private: sf::Convexshape shapeship; }; #endif //====
2 2023-04-21
编程技术问答社区