【问题标题】:Unable to Draw in C++ on Raspberry Pi无法在 Raspberry Pi 上使用 C++ 绘图
【发布时间】:2014-10-03 17:50:54
【问题描述】:

在一些帮助下,我设法让下面的程序编译并运行,但尽管它一直在运行,但我在 Pi 的屏幕上看不到任何东西。

我不认为这是使用 openvg 和 ajstarks 代码所独有的问题,因为在 problem I had compiling the test progam 期间,我尝试了另一种编写图像的方式(对不起,我只记得它是低级的并且不需要openvg的包含)。它需要一些搜索和重写才能编译,当它编译时,同样的事情发生了。

我坚持了一段时间,但没有成功。有人提到 Raspberry Pi 和 X Windows 的某种限制会导致同样的问题。你画了一些东西,但它不显示。鉴于有几个 cmets 表明 openvg 可以工作,我回到了那个位置(感谢一个叫 Ross 的人)最终找出了我无法编译代码的原因。

所以现在我可以编译其他人必须成功运行的代码,但它不会在屏幕上绘制任何内容。我知道代码可以运行-它会占用 CPU 周期(官方演示确实如此,尽管它仍在运行,但我的更少)并且代码可以退出

另一种处理图形的方法遇到了同样的无输出显示问题,所以我认为问题出在我的 Pi 上,但我对如何解决 X Windows (或者它可能已经X11,希望我一直打开标签!)不想画问题。

非常感谢任何帮助,在此先感谢!

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

extern "C" {
#include "VG/openvg.h"
#include "VG/vgu.h"
#include "fontinfo.h"
#include "shapes.h"
}

using namespace std;

int main (void) {

int width, height;
        VGfloat w2, h2, w;
    char s[3];

    init(&width, &height);                                      // Graphics initialization

    w2 = (VGfloat)(width/2);
    h2 = (VGfloat)(height/2);
    w  = (VGfloat)w;

    Start(width, height);                                       // Start the picture
    Background(0, 0, 0);                                        // Black background
    Fill(44, 77, 232, 1);                                       // Big blue marble
    Circle(w2, 0, w);                                           // The "world"
    Fill(255, 255, 255, 1);                                     // White text
    TextMid(w2, h2, "hello, world", SerifTypeface, width/10);   // Greetings
    End();                                                      // End the picture
    fgets(s, 2, stdin);                                         // Pause until RETURN]
    finish();                                                   // Graphics cleanup
    exit(0);
}

【问题讨论】:

  • 我四处搜索了一下,发现这个'......对于休闲编码人员来说,目前有一个小障碍。传统方式(在 Linux 上)是使用 X 窗口系统提供一个可以渲染 OpenGL/OpenGL ES 表面的表面。目前,树莓派的 X 实现无法做到这一点,所以你不能使用 X 来提供你的表面。虽然我没有尝试这些库,但我认为问题是相关的。
  • 我也尝试过与 OpenVG 无关的this code 并且发生了同样的事情 - prog 使用控制台输出运行,但没有屏幕显示应该有...
  • 如果您想绘制简单的形状,也许您应该尝试 Raspian 附带的 PyGame。如果您想坚持使用 c++,我建议您尝试 OpenFrameworks,因为它在幕后处理 OpenGLES 渲染,您可以轻松绘制 circles 或其他形状

标签: c++ raspberry-pi drawing2d openvg


【解决方案1】:

好的……

幸运的是,我找到了答案,这很奇怪。反正对我来说……

如果其他人遇到问题,这里是(部分)解决方案,它会导致很快发布另一个问题。

我想在我的学校经营一个编程俱乐部,将 Pi 物理连接到 kb、鼠标和显示器是不切实际的,因此它们都自动运行 VNC,我们使用 Ultra-VNC 连接到机器。程序编写在共享目录中,Eclipse C++ 在主机上运行;因此所有程序输出都通过 VNC 查看。

我一直在继续尝试解决问题,并在某一时刻连接了键盘和鼠标,并注意到它们似乎已被识别(激光亮起、Caps Lock 切换等),但它们什么也没做移动/输入。

最终,当我越来越困惑为什么没有其他人遇到这个问题时,便士开始在边缘撕裂。似乎很奇怪,没有其他人有这个问题,然后我开始更多地想知道 kb/鼠标问题。

我尝试将 HDMI 输出插入家里的显示器(学校的仍然是模拟 d-sub!),你瞧,物理 kb 和鼠标工作正常。然后就变得很奇怪了!

不知何故,我有 2 个桌面同时运行。物理键盘和鼠标控制一个,VNC 控制另一个。有趣的是,VNC 的标题 Pi's X Desktop 暗示图形问题可能与 X 有关,但我不确定原因如下。

如果我在“物理”桌面上启动终端窗口,它不会显示在“VNC”桌面上,反之亦然 - 它们似乎是独立的,尽管这并不完全正确。

当我在“物理”桌面上运行测试文件时,它工作正常并且只能使用物理 kb 进行控制。当我在“VNC”桌面上运行它时,它只能用 VNC kb 控制,但输出显示在物理屏幕上。

我真的不明白!

所以,这回答了最初的问题,因为程序确实在 Pi 上运行。

关于如何让 VNC 显示“物理”桌面或如何将图形输出定位到“正确”桌面的问题即将发布(希望是最终的)。

【讨论】:

  • X-Windows 配置文件对显示和输入设备有单独的映射。听起来 VNC 配置正确使用了 VNC 输入设备,但正在连接到物理屏幕。另一种可能性是您使用的是直接连接到 Broadcom VideoCore 处理器的 OpenGL 驱动程序,而忽略了 X 显示设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2016-01-16
  • 1970-01-01
相关资源
最近更新 更多