标签: sfml

OpenCV 2.3:将Mat转换为RGBA像素阵列

我试图使用OpenCV从网络摄像头抓取帧并使用SFML在窗口中显示它们.

VideoCapture以OpenCV的Mat格式返回帧.为了显示帧,SFML需要uint8格式的一维像素阵列,据我所知,它可与uchar互换.预计该阵列表示每像素RGBA 32位.

所以,我有一个uchar数组,我循环Mat数据并复制每个像素:

VideoCapture cap(0);
Mat frame;
cap >> frame;

uchar* camData = new uchar[640*480*4];
uchar* pixelPtr = frame.data;
for(int i = 0; i < frame.rows; i++)
{
    for(int j = 0; j < frame.cols; j++)
    {
        camData[i*frame.cols + j + 2] = pixelPtr[i*frame.cols + j + 0]; // B
        camData[i*frame.cols + j + 1] = pixelPtr[i*frame.cols + j + 1]; // G
        camData[i*frame.cols + j + 0] = pixelPtr[i*frame.cols + j + 2]; // R
        camData[i*frame.cols + j …
Run Code Online (Sandbox Code Playgroud)

c++ webcam opencv sfml

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

用cmake构建库

我为打扰你们而道歉,但我对cmake有一点编译问题.

我有一个CMakeLists.txt文件,我用它来构建一个测试可执行文件和一个共享库.它们都依赖于另一个库(SFML).

我在MinGW的窗口上使用cmake.

我知道我正在构建的lib的名称与sfml有点混淆,但它应该是一个SFML包装器,所以,我找不到更好的名字!

这里是CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
project(projectName)

set(EXECUTABLE_NAME testSFML)
set(LIBRARY_NAME    SFMLwindow)

set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin/)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include /
${CMAKE_CURRENT_SOURCE_DIR}/../../include
)

link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../lib/)

file(
    GLOB_RECURSE
    SRC_FILES
    src/*
)

file(
    GLOB_RECURSE
    INCLUDE_FILES
    include/*
)

add_executable(
${EXECUTABLE_NAME}
main.cpp
${SRC_FILES}
${INCLUDE_FILES}
)

target_link_libraries(
    ${EXECUTABLE_NAME}
    sfml-main
    sfml-system
    sfml-window
)


add_library(
${LIBRARY_NAME}
SHARED
${SRC_FILES}
)
Run Code Online (Sandbox Code Playgroud)

我在终端得到了什么:

"C:\MinGW\bin\mingw32-make.exe" 
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/iksemel/docs/WorkBench/programming/projets/TestSFML/cmake
Linking CXX shared library libSFMLwindow.dll
Creating library file: libSFMLwindow.dll.a
CMakeFiles\SFMLwindow.dir/objects.a(SFMLWindow.cpp.obj):SFMLWindow.cpp:(.text+0x59):undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'
CMakeFiles\SFMLwindow.dir/objects.a(SFMLWindow.cpp.obj):SFMLWindow.cpp:(.text+0xda): undefined reference to `_imp___ZN2sf6WindowC1ENS_9VideoModeERKSsjRKNS_15ContextSettingsE' …
Run Code Online (Sandbox Code Playgroud)

c++ shared build cmake sfml

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

在SFML中获取文本的维度

我想知道如何在SFML中获取文本的尺寸?

我试着这样做:

 sf::Text text("Hello SFML", font, 50);

// using text.getRect()
// i also tried getScale() & getSize()
// neither are correct

 text.setPosition( window.getSize().y/2 - text.getRect().y,50 );
Run Code Online (Sandbox Code Playgroud)

有人知道吗 ?

谢谢 :)

c++ sfml

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

C++/OOP游戏设计

我正在通过使用SFML和OpenGL制作一个小游戏来练习我的新手c ++技能.编程部分在大多数情况下都很好,但我对实际代码/类设计有疑问.

我有一个类,MainLoop,它包含游戏循环并拥有以下每个类的一个实例:事件,图形,命令,游戏和UI.我最初希望所有这些都是一个单独的类(在不同的.cpp文件中分隔函数),但被告知这是OOP/C++的错误方法.然而,虽然我可以看到分离它们的好方面(封装,模块化,调试),但我似乎也遇到了很多不好的东西.让我举一个用户按下UI按钮的例子.

首先,MainLoop从SFML的窗口类中获取事件.MainLoop将它发送到我自己的Event类,该类解释事件并将其发送到UI类以检查它是否"命中"了任何按钮.如果为true,则UI类将其发送到Command类,该类解释按钮命令.然后,最后,命令类将其发送到Game类或其他任何需要去的地方.

对我来说这一切看起来都非常苛刻,并且至少我此刻一直在做的方式,还需要很多前瞻性声明(在我了解那些我最终得到大量循环依赖之前) .我怀疑它对性能有多大好处.

无论如何,这里有一些我不知道的伎俩吗?这些课程应该如何联系,他们应该如何沟通?我应该如何将命令从事件类转发到UI类?我是否真的应该在任何地方都有前瞻性声明,包含和内容,这不会破坏模块化吗?我是否应该通过MainLoop类运行并使用不需要声明的整数/浮点数/字符转发返回值?我在这里有点不知所措.

c++ sfml

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

C++ Box2D - 如果不管它,动态物体不受重力影响

我在SFML2中玩Box2D并实现了; 当我改变世界的引力时,未受影响的动态物体不会受到重力变化的影响.我准备了一个视频,使这个解释更加清晰.

有解决方案吗 我是否必须发挥自己的引力,为什么会发生这种情况?

这是视频.请注意,如果物体不会移动一会儿,它们不会受到最近移动的物体的影响.

c c++ box2d sfml

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

如何使用 MinGW 编译 SFML?

我有一个简单的文件“main.cpp”,如下所示。我还在“C:\SFML-2.1\”下拥有所有 sfml 2.1 库。我的问题是:编译、链接和运行该项目的命令是什么?我非常习惯使用 g++ 从命令行编译项目,但之前从未使用任何外部库(例如 sfml)这样做过。任何帮助将不胜感激。谢谢。

#include <SFML/Window.hpp>

int main()
{
    sf::Window window(sf::VideoMode(800, 600), "My window");
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ mingw g++ sfml

7
推荐指数
2
解决办法
8078
查看次数

Linux mingw32 sfml交叉编译为windows - 缺少dll文件

我正在以下列方式编译我的c ++项目:

/usr/bin/i686-w64-mingw32-g++ -g -std=c++0x -Wall -I /home/bluszcz/dev/win64/SFML-2.1/include -L /home/bluszcz/dev/win64/SFML-2.1/lib -static-libgcc -static-libstdc++ -static -O4 -c src/game.cpp -o src/game.a -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行我的exe文件时,我得到关于丢失dll文件的错误:

bluszcz@zendo ~/dev/win32/builds/magicwizard $ wine mw.exe 
err:module:import_dll Library libgcc_s_dw2-1.dll (which is needed by L"Z:\\home\\bluszcz\\dev\\win32\\builds\\magicwizard\\sfml-system-2.dll") not found
err:module:import_dll Library libgcc_s_sjlj-1.dll (which is needed by L"Z:\\home\\bluszcz\\dev\\win32\\builds\\magicwizard\\libstdc++-6.dll") not found
err:module:import_dll Library libwinpthread-1.dll (which is needed by L"Z:\\home\\bluszcz\\dev\\win32\\builds\\magicwizard\\libstdc++-6.dll") not found
err:module:import_dll Library libstdc++-6.dll (which is needed by L"Z:\\home\\bluszcz\\dev\\win32\\builds\\magicwizard\\sfml-system-2.dll") not found
err:module:import_dll Library sfml-system-2.dll (which is needed by L"Z:\\home\\bluszcz\\dev\\win32\\builds\\magicwizard\\sfml-audio-2.dll") not found
err:module:import_dll Library …
Run Code Online (Sandbox Code Playgroud)

c++ command-line mingw sfml

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

无法在动态链接库sfml-graphics-2.dll中找到过程入口点_ZSt24__throw_out_of_range_fmtPKcz

今天我决定下载,安装并尝试使用SFML 2.2.我还用MinGW编译器下载了Code :: Blocks.我设置了所有内容并正确安装了所有内容(或者我认为)并尝试运行示例代码以查看它是否可行:

#include <SFML/Graphics.hpp>

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();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码编译正确,虽然尝试运行它出现一个错误消息框说"程序入口点_ZSt24__throw_out_of_range_fmtPKcz无法位于动态链接库sfml-graphics-2.dll".我在网上搜索但没有发现任何与此问题有关的内容,所以我来到这里寻求帮助.感谢进一步的答案.

c++ sfml

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

从子目录中CMake链接库

我想在我的项目中包含SFML源代码.我的目录布局如下:

main
  SFML (subtree synced with the official git repo)
  src
    <various modules>
    General (here lies the binary)
Run Code Online (Sandbox Code Playgroud)

从主要级别我首先添加SFML子目录然后再​​添加src.正如我看到构建日志,这产生了库:

sfml?system
sfml?window
sfml?network
sfml?graphics
sfml?audio
sfml?main
Run Code Online (Sandbox Code Playgroud)

现在我想将它们链接到General目录中的二进制文件,如下所示:

add_executable(main ${main_SRCS})
target_link_libraries (main
  sfml?system
  sfml?window
  sfml?network
  sfml?graphics
  sfml?audio
  sfml?main
  # Other stuff here
)
Run Code Online (Sandbox Code Playgroud)

但我得到:

/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml?system
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml?window
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml?network
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml?graphics
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml?audio
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lsfml?main
Run Code Online (Sandbox Code Playgroud)

为什么CMake尝试使用系统库而不是刚刚构建的系统库,如何解决这个问题呢?

c++ linker gcc cmake sfml

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

SFML没有静态链接到openal32(静态链接到所有其他依赖项)

我使用CMake for MinGW编译了SFML.运行"mingw32-make install"后,所有内容都已构建并安装,没有任何错误.但是在运行示例时--pong.exe,sound.exe,sound-capture.exe和voip.exe都依赖于openal32.dll.

SFML_USE_STATIC_LIBS = true在配置CMake时指定,示例可执行文件的所有其他依赖项仅在本机Windows dll上.

任何人都可以解释为什么它动态链接到openal32(但没有别的)?

编辑:我刚刚遇到了这个主题http://en.sfml-dev.org/forums/index.php?topic=262.0,它正在讨论完全相同的问题.我想(因为这是从2008年开始),现在已经实现了.还是它仍处于相同的情况?

编辑2:此处的响应http://en.sfml-dev.org/forums/index.php?topic=18119.0表明OpenAL必须由于许可证而动态链接.任何人都可以确认许可证是否允许使用可执行文件分发openal32.dll?

c++ cmake sfml

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

标签 统计

c++ ×10

sfml ×10

cmake ×3

mingw ×2

box2d ×1

build ×1

c ×1

command-line ×1

g++ ×1

gcc ×1

linker ×1

opencv ×1

shared ×1

webcam ×1