小编Arm*_*ada的帖子

在面孔之间共享顶点值得吗?

我目前正在开发一个WebGL项目,尽管我认为这个问题在许多图形API中是通用的.

让我用一个简单的立方体的例子来展示我的要求.

一个立方体有6个面,每个面有4个顶点,因此我们总共有24个顶点构成了立方体.但是,如果我们在面之间共享顶点,我们可以将顶点总数减少到只有8.正如我一直在阅读的那样,这可以节省大量宝贵的GPU内存,尤其是在处理复杂的模型和场景时.

另一方面,我亲身经历了在面之间共享顶点的一些缺点.这些包括:

  • 复杂的顶点法线计算,因为我们必须找到每个顶点的"平均"法线,同时考虑到顶点所属的每个面的面法线.

  • 无论如何必须复制一些顶点以与其对应的UV坐标"匹配".

  • 由于顶点可能被许多面共享,因此我们无法使用每个顶点着色为每个面指定不同的颜色.

我一直在阅读的书真正强调顶点共享的重要性,以最大限度地减少内存使用,所以当我遇到顶点共享的一些缺点时,我不确定顶点着色的可行性/有用性如何,并且作者没有提到顶点共享的任何缺点我想得到你们的意见.那么从顶点着色产生的内存节省真的那么重要吗?

opengl 3d opengl-es webgl

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

'类型非静态const成员不能使用默认赋值运算符' - 这是什么意思?

此类标记以下错误:'非静态const成员'const int成员:: membershipNo',不能使用默认赋值运算符'.奇怪的是这个代码在另一个项目中重复并完美运行.你能帮我把它搞定吗?

Member.h

class Member : public Person
    {
    public:
        Member();
        Member(int membershipNo);
        virtual ~Member();

        int getMembershipNo() const;

    private:
        const int membershipNo;

        friend class boost::serialization::access;
        template<class Archive>
        void serialize(Archive& ar, const unsigned int version)
        {
            ar & boost::serialization::base_object<Person>(*this);
            ar & membershipNo;
        }

    };
Run Code Online (Sandbox Code Playgroud)

Member.cpp

Member::Member() : membershipNo(0)
{
    Person();
}

Member::Member(int memberNo) : membershipNo(memberNo)
{
    Person();
}

Member::~Member()
{
    // TODO Auto-generated destructor stub
}

int Member::getMembershipNo() const
{
    return membershipNo;
}
Run Code Online (Sandbox Code Playgroud)

c++ const

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

ClassPool.get()在明确存在的类上抛出NotFoundException?

我正在使用Javassist库在运行时加载一个类.

public class FilterClassGenerator<T, DT> {
   private volatile static Long classNameIncrementor = 1L;

   private Class<T> listFilterClass;
   private Class<DT> dataObjectClass;

   public FilterClassGenerator(Class<T> listFilterClass, Class<DT> dataObjectClass) {
       this.listFilterClass = listFilterClass;
       this.dataObjectClass = dataObjectClass;
   }

   public T createFilterClass(ApiFilter filter) {
       try {
           ClassPool pool = ClassPool.getDefault();
           CtClass comparison = pool.makeClass("com.frammo.filterClasses." + generateNewClassName());
           comparison.setSuperclass(pool.get(listFilterClass.getName()));
           // More code
Run Code Online (Sandbox Code Playgroud)

我收到以下错误: comparison.setSuperclass(pool.get(listFilterClass.getName()));

javassist.NotFoundException: com.frammo.stocks.api.simulation.IiiAccountComparisonFilter
Run Code Online (Sandbox Code Playgroud)

但显然这个类存在!

package com.frammo.stocks.api.simulation;

// Imports

public abstract class IiiAccountComparisonFilter extends ListComparisonFilter<IiiAccount> {

}
Run Code Online (Sandbox Code Playgroud)

任何想法为什么它找不到课程?

java classloader javassist

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

如何在C++中实现双向依赖注入?

我正在创建一个MVC应用程序,我需要GUI来与控件通信(调用控件类中的方法),我需要控件与GUI通信(以显示数据,例如与模型中的更改相关的输出消息) ).因此,我需要GUI拥有控件的引用(或指针),反之亦然.我想使用依赖注入来建立这些关系.

任何类型的双向DI的问题是,在创建第一个对象之前,你不能将第一个对象传递给第二个对象,但是在创建时你不能将第二个对象传递给第一个对象.

如何实现这种2路DI?

c++ dependency-injection

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

如何在默认构造函数中初始化引用成员?

问题真的说明了一切。

如果要实现默认构造函数,最好改用const指针成员吗?

c++ pointers reference

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

在Prolog中使用变量在事实中是一种常见的做法吗?

我在Prolog中遇到了这个事实的例子:

vertical(line(point(X,Y),point(X,Z))).
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很奇怪,因为我认为事实总是只包含一个仿函数和原子(或原子结构),而上面的代码似乎更像一个规则(如果....那么直线是垂直的).

这让我很困惑,我现在正在试图找出包含变量和规则的事实与应该使用其中一个或另一个的事实之间的区别.有人请帮帮我!:S

另外,我怎么能用规则编写这段代码?

prolog

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

实现接口但返回返回类型的子类?

我在C#中使用ASP.NET MVC.我正在创建服务类.我有一个驱动程序服务接口的服务接口(IDriverService).

它具有以下方法定义:

Driver New();
Run Code Online (Sandbox Code Playgroud)

我有两个这个接口的实现,它实现了这个方法:

Driver New()
{
   return new Driver();
}

Driver New()
{
   return new SubclassOfDriver();
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,一个实现通过返回基本驱动程序来实现New方法,另一个实现通过Driver的某个子类实现.

问题是通过实现接口我必须返回'Driver',但有时我想返回'SubclassOfDriver'.我可以说你应该把结果转换成你想要的驱动程序,但这是不安全的,并且编码器需要有关实现的信息以确定哪个驱动程序已被实例化.这样做的最佳方法是什么?

谢谢

c# inheritance casting interface

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

在C++中返回局部变量的引用和标准指针有哪些替代方法?

我是C++的新手,我知道有三种返回局部变量的方法,并且都有它们的缺点:

Person& getPerson()
{
   Person bob;
   return bob;
}
Run Code Online (Sandbox Code Playgroud)

显然不是一个好主意.

Person getPerson()
{
   Person bob;
   return bob;
}
Run Code Online (Sandbox Code Playgroud)

没有空指针或悬空引用的可能性,但性能命中.

Person* getPerson()
{
   return new Person();
}
Run Code Online (Sandbox Code Playgroud)

没有空指针的可能性,但肯定这违反了OO设计的基本规则.另一个对象将不得不删除 - 但为什么要这样做?getPerson()方法的实现与它无关.

所以,我正在寻找替代方案.我听说过共享指针和智能指针(标准和Boost),但我不确定它们中是否有任何一个用于处理这个问题.你们有什么建议?

c++ boost pointers reference smart-pointers

0
推荐指数
1
解决办法
145
查看次数