小编ash*_*gpu的帖子

正确的骨骼数据从blender导出到ogl中的视图?

编辑(下面的原帖):

所以我想出了以下代码.我可以导出网格,骨骼结构和动画.我可以为一个简单的骨架制作动画.但由于某些原因,如果我为多个骨骼制作动画,则会出现问题并且手臂会在错误的轴上移动.

我的cpp代码在这里:http://kyuu.co.uk/so/main.cpp

我的python导出代码在这里:http://kyuu.co.uk/so/test.py

有人可以告诉我我做错了什么吗?我想这可能与搅拌机中的骨辊有关.我看过很多关于这个的帖子.

谢谢.

(原帖:)

我一直在研究这个问题一段时间,仍然无法弄清楚我错过了什么,所以我希望有人能帮助我:3

是的,我的应用程序中有类似下面的代码:

class bone {
    bone * child;
    Eigen::Matrix4f local_bind_pose; // this i read from a file
    Eigen::Matrix4f final_skinning_matrix; // i then transform each vertex by this matrix

    // temporary variables
    Eigen::Matrix4f inv_bind_pose;
    Eigen::Matrix4f world_bind_pose;
}
Run Code Online (Sandbox Code Playgroud)

即一个简单的骨骼层次结构.

我相信我可以解决这个问题inv_bind_pose:

world_bind_pose = bone.parent.world_bind_pose * local_bind_pose
inv_bind_pose = world_bind_pose.inverse()
Run Code Online (Sandbox Code Playgroud)

我知道bind_pose必须相对于父骨骼.

我知道搅拌机是z = up我正在使用y = up.

但我无法从搅拌机中获取此信息.我使用的是2.56.3版.

矩阵的旋转部分是bone.matrix_local?翻译部分会是bone.tail() - bone.head()吗?

骨滚怎么样?这似乎确实会影响结果.

一些参考:

http://www.gamedev.net/topic/571044-skeletal-animation-bonespace …

python math animation blender blender-2.50

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

有没有办法单独输出单个函数的程序集?

我正在学习如何将C文件编译为机器代码.我知道我可以gcc使用-S标志生成汇编,但是它也会生成很多代码,main()而且printf()我现在对此不感兴趣.

有没有办法单独获取gccclang" 编译 "一个函数并输出程序集?

即单独获取以下c的程序集:

int add( int a, int b ) {
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

compiler-construction assembly gcc clang

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

多重采样渲染到ios中的纹理

我试图在启用了多重采样的情况下渲染到ios中的纹理,然后在我的最终输出中使用该纹理.这可能吗?

到目前为止,我只获得了黑色纹理或混淆图像.我使用的代码是:

  glGenTextures(1, &texture);
  glBindTexture(GL_TEXTURE_2D, texture);
  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

  glGenFramebuffers(1, &framebuffer);
  glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);

  glGenRenderbuffers(1, &colorRenderbuffer);
  glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
  //glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8_OES, width, height);
  glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER, 4, GL_RGBA4, width, height);
  glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderbuffer);
  glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);

  glGenRenderbuffers(1, &depthRenderbuffer);
  glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer);
  //glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, self.view.bounds.size.height);
  glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER, 4, GL_DEPTH_COMPONENT16, width, height);
  glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);

  GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER) ;
  if(status != GL_FRAMEBUFFER_COMPLETE) {
    NSLog(@"failed to make complete framebuffer object %x", status);
  }

  // Render my scene …
Run Code Online (Sandbox Code Playgroud)

c++ iphone graphics opengl-es ios

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

静态内存vs堆内存?

我在内存受限的环境中工作,需要动态创建字符串,但仍然没有占用堆内存.这是否有意义:

static char staticStringBuffer[10240];
static size_t staticStringWatermark = 0;

void createString( const char * something, const char * somethingElse ) {
    char buf[1024];
    strcat(buf, "test");
    strcat(buf, something);
    strcat(buf, somethingElse);

    strcat(&staticStringBuffer[staticStringWatermark], buf);
    staticStringWatermark += strlen(buf+1);
}
Run Code Online (Sandbox Code Playgroud)

这可能是编译,但我正在尝试理智 - 为堆内存牺牲静态内存?

谢谢你^ _ ^

c memory

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

如何从Android捕获静态java.lang.UnsatisfiedLinkError并向用户显示更好的错误消息?

创建后,我的应用程序会加载各种共享对象。我想捕获由于共享对象不存在于设备而引发的错误,并向用户显示更好的错误消息。我该如何实现?

我可以抓住java.lang.UnsatisfiedLinkError这样的

static
{
    try
    {
        System.loadLibrary("MyApplication");
    }
    catch(java.lang.UnsatisfiedLinkError e)
    {
        if(e.getMessage().contains("libSharedObject"))
        {
            Log.e( TAG, "This device does not support ..." );
        }
        else
        {
            throw e;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,Toast.makeText(...).show()以及其他应用程序消息框将不起作用,因为该应用程序将onCreate()由于先前的错误而死亡。

是否可以更改系统默认错误消息“不幸的是有一个错误..”的方法?还是通过其他进程或Android OS显示错误消息的方式?

java android android-ndk android-activity

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

如何消除Rust中的特征歧义?

我想write_fmt在两种不同类型的对象上使用该方法:

use std::fmt::Write;
use std::io::Write;

fn main() {
    let mut a = String::new();
    let mut b = std::fs::File::create("test").unwrap();

    a.write_fmt(format_args!("hello"));
    b.write_fmt(format_args!("hello"));
}
Run Code Online (Sandbox Code Playgroud)

我在使用时遇到错误,Write因为它们的名称相同:

error[E0252]: a trait named `Write` has already been imported in this module
 --> src/main.rs:8:5
  |
7 | use std::fmt::Write;
  |     --------------- previous import of `Write` here
8 | use std::io::Write;
  |     ^^^^^^^^^^^^^^ `Write` already imported
      a.write_fmt(format_args!("hello"));
      b.write_fmt(format_args!("hello"));
Run Code Online (Sandbox Code Playgroud)

或者我得到一个错误,说该特征不可用:

error[E0599]: no method named `write_fmt` found for type `std::fs::File` in the current scope
  --> src/main.rs:76:4
   | …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
2
解决办法
1310
查看次数

Ubuntu下使用snap时如何将nvim添加到update-alternatives中

我想将 nvim (快速)添加到update-alternatives. 问题是,在确定要运行哪个程序时,snap 似乎以神秘的方式工作:

$ sudo update-alternatives --install /usr/bin/vim vim /snap/bin/nvim 60

$ vim # works

$ vim hello.txt
error: unknown command "hello.txt", see 'snap help'.
Run Code Online (Sandbox Code Playgroud)

如果我看一下/snap/bin/nvim它是一个链接/usr/bin/snap

$ ls -lah /snap/bin/nvim
lrwxrwxrwx 1 root root 13 Jan 25 15:02 /snap/bin/nvim -> /usr/bin/snap
Run Code Online (Sandbox Code Playgroud)

但是snap可执行文件如何确定它需要运行nvim

linux ubuntu neovim

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

在c中,有哪些规则可以控制编译器如何将相同的字符串合并到可执行文件中

我试图找到c和c ++编译器的规则是什么,将字符串放入可执行文件的数据部分,不知道在哪里看.我想知道以下所有地址在c/c ++中是否保证与规范相同:

char * test1 = "hello";
const char * test2 = "hello";
static char * test3 = "hello";
static const char * test4 = "hello";
extern const char * test5; // Defined in another compilation unit as "hello"
extern const char * test6; // Defined in another shared object as "hello"
Run Code Online (Sandbox Code Playgroud)

在Windows上进行测试,它们都是一样的.但是我不知道它们是否适用于所有操作系统.

c compiler-construction

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

如果我有一个真值表,有没有办法确定我需要的真值表的按位表达式?

我试图在c中执行以下操作:

unsigned int mask;
unsigned int previous;
unsigned int new;
unsigned int out;

for( int i = 0; i < 8; ++i )
{
    bool bit_set = GET_BIT( mask, i );

    // If the mask bit is true, use the new bit, otherwise use the previous bit
    SET_BIT( out, i, GET_BIT( bit_set ? new : previous, i ) );
}
Run Code Online (Sandbox Code Playgroud)

但是我认为使用按位运算可能会更容易,更快捷.我有真值表,但我不知道如何获得我需要的表达式.

真相表是:

m | p | n | o
0 | 0 | 0 | 0
1 | 0 | …
Run Code Online (Sandbox Code Playgroud)

c binary bit-manipulation

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

如何获取存储在std :: function中的c样式函数的地址?

为了进行调试,我想打印存储在我的std :: function中的函数指针的地址。我可以保证std :: function将指向c样式函数或lambda。有什么办法吗?

否则,添加函数指针时,我将不得不将其存储在内存中,并修改所有的lambda。

我试图在这里使用答案/sf/answers/1289601491/,但是它似乎不起作用。

一些示例代码:

std::function<void()> func = commands.front();
void * fp = get_fn_ptr<0>(func);
void * bb = &glBindBuffer;
printf("bb is %x\n", bb); // Outputs 5503dfe0
printf("fp is %x\n", fp); // Should be the same as above, but outputs 4f9680
Run Code Online (Sandbox Code Playgroud)

c++ lambda stl c++11

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

如何真正禁用所有 rustc 优化?

我正在尝试通过编译 Rust 来学习汇编。我找到了一种将 Rust 代码编译为二进制机器代码并能够objdump查看程序集的方法。但是,如果我写以下内容:

#![no_main]

#[link_section = ".text.entry"]
#[no_mangle]
pub extern "C" fn _start() -> ! {
    let a: u64 = 4;
    let b: u64 = 7;
    let c: u64 = a * b;
    
    loop {}
}
Run Code Online (Sandbox Code Playgroud)

我得到的程序集是:

0000000000000000 <.data>:
   0:   1101                    addi    sp,sp,-32
   2:   4511                    li      a0,4
   4:   e42a                    sd      a0,8(sp)
   6:   451d                    li      a0,7
   8:   e82a                    sd      a0,16(sp)
   a:   4571                    li      a0,28
   c:   ec2a                    sd      a0,24(sp)
   e:   a009                    j       0x10
  10:   a001                    j       0x10
Run Code Online (Sandbox Code Playgroud)

所以看起来 …

llvm rust riscv

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